Go語言中 Scan 與 Scanf 和 Scanln的區別
阿新 • • 發佈:2021-02-05
三種輸入函式的區別
首先它們都是在fmt包下的三個掃描函式,類似於java中是Scanner一樣,在Go語言中使用&取值指標來進行獲值
第一種:fmt.Scan
輸入:讀取以空白符分割的值返回到地址中進行修改,換行視為空白符
返回值:錯誤處理,返回值中有一個int型別的值是返回正確的數量,有一個err是錯誤的原因
var ( // 定義全域性變數
name int
age int
married int
)
ag1, err := fmt.Scan(&name,&age,&married) 返回型別根據使用場景可以不寫,但是根據程式碼規範,err都要處理,加上在這裡為了更加嚴謹,確實需要err來處理
fmt.Print(err) // 這裡如果出錯,則顯示出錯的原因
fmt.Println(ag1) // 這個返回引數取到的是成功了幾個
fmt.Printf("掃描結果:name:%d age:%d married:%d \n",name,age,married) // Scan讀取以空白為分割的值儲存給引數中,換行符視為空白符,如果返回的資料比提供的引數少,會返回錯誤原因
成功結果:
有錯誤結果:
開頭錯誤則直接全部錯誤:
第二種 fmt.Scanf
它與Scan比更加嚴謹,使用format讀取空白符,在輸入時也必須輸入要輸入的資料,適用場景學生輸入賬號,性別,而且必須要根據指定的方式輸入,順序也不可以改變
var (
name string
age int
married bool
)
ag1, err := fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &married) // 這個函式中引數前必須填入標識格式如1: 2: ...
fmt.Println(ag1)
fmt.Println(err)
fmt.Printf("掃描結果 name:%s age:%d married:%t", name, age, married)
成功結果:
有錯誤結果:
第三種 fmt.Scanln
Scanln 類似 Scan,但它在遇到換行時才停止掃描。最後一個數據後面必須有換行或者到達結束位置。使用場景就是隻要換行就結束
返回錯誤和Scan一樣
var (
name string
age int
married int
)
ag1, err := fmt.Scanln(&name,&age,&married)
fmt.Println(ag1)
fmt.Println(err)
fmt.Printf("掃描結果 name:%s age:%d married:%d \n", name, age, married)
成功結果:
有錯誤結果:
這裡有一個錯誤
var (
name string
age int
married bool // 這裡由原本的int改變成了bool
)
ag1, err := fmt.Scanln(&name,&age,&married)
fmt.Println(ag1)
fmt.Println(err)
fmt.Printf("掃描結果 name:%s age:%d married:%t \n", name, age, married)
錯誤顯示:
歡迎大家留言探討