1. 程式人生 > 其它 >Go語言中 Scan 與 Scanf 和 Scanln的區別

Go語言中 Scan 與 Scanf 和 Scanln的區別

技術標籤:Golanggo

三種輸入函式的區別

首先它們都是在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)

錯誤顯示:
在這裡插入圖片描述
歡迎大家留言探討