
耐心和持久勝過激烈和狂熱。
哈嘍大家好,我是陳明勇,今天分享的內容是 Go fmt 標準庫輸入函數的使用。如果本文對你有幫助,不妨點個贊,如果你是 Go 語言初學者,不妨點個關注,一起成長一起進步,如果本文有錯誤的地方,歡迎指出!
函數
| 描述 |
Fscan(r io.Reader, a ...any) (n int, err error) | 從 r 中讀取內容,以空格或換行符為分隔符,按順序依次賦值給不同參數 |
Fscanf(r io.Reader, format string, a ...any) (n int, err error) | 從 r 中讀取內容,以空格為分隔符,將分割后的內容存儲到由格式決定的不同參數中。r 中存在的換行符必須與格式中的換行符相匹配 |
Fscanln(r io.Reader, a ...any) (n int, err error) | 類似于 Fscan 函數,不同點是遇到換行符后停止讀取,最后一項內容后面必須有換行符或 EOF |
Scan(a ...any) (n int, err error) | 從標準輸入讀取內容,以空格或換行符為分隔符,按順序依次賦值給不同參數 |
Scanf(format string, a ...any) (n int, err error) | 從標準輸入讀取內容,以空格為分隔符,將分割后的內容存儲到由格式決定的不同參數中。標準輸入中的換行符必須與格式中的換行符相匹配。特殊情況是 %c 占位符可以接收空格或換行符等 |
Scanln(a ...any) (n int, err error) | 類似于 Scan 函數,不同點是遇到換行符后停止讀取,最后一項內容后面必須有換行符或 EOF |
Sscan(str string, a ...any) (n int, err error) | 從字符串中讀取內容,以空格或換行符為分隔符,按順序依次賦值給不同參數 |
Sscanf(str string, format string, a ...any) (n int, err error) | 從字符串中讀取內容,以空格為分隔符,將分割后的內容存儲到由格式決定的不同參數中。字符串中的換行符必須與格式中的換行符相匹配 |
Sscanln(str string, a ...any) (n int, err error) | 類似于 Sscan 函數,不同點是遇到換行符后停止讀取,字符串最后面必須有換行符或 EOF |
func main() { file, err := os.Open("./test.txt") if err != nil { return } defer file.Close() var num1, num2 int _, err = fmt.Fscan(file, &num1, &num2) if err != nil { return } fmt.Println(num1, num2) // 123 456}?
?./test.txt?
? 的內容為:??123 456?
???Fscan?
? 函數通過空格或換行符分隔內容并賦值給變量,因此使用 ??num1?
? 和 ??num2?
? 變量接收分隔后的內容 ??123?
? ??456?
?。必須將 ??num1?
? 和 ??num2?
? 的地址傳遞進去,而不是值傳遞。Fscanfimport ( "fmt" "os")func main() { file, err := os.Open("./test.txt") if err != nil { return } defer file.Close() var num1, num2 int _, err = fmt.Fscanf(file, "%d%d", &num1, &num2) if err != nil { return } fmt.Println(num1, num2) // 123 456}
通過占位符 %d,將文件里的內容賦值給 ??num1?
? 和 ??num2?
? 變量。
import ( "fmt" "os")func main() { file, err := os.Open("./test.txt") if err != nil { return } defer file.Close() var num1, num2 int _, err = fmt.Fscanln(file, &num1, &num2) if err != nil { return } fmt.Println(num1, num2) // 123 456}
??Fscanln?
? 與 Fscan
類似,但是遇到換行符停止掃描,如果所掃描到的內容數量與變量數量不一致,將會返回 error
。
import "fmt"func main() { var name string fmt.Println("請輸入你的姓名:") fmt.Scan(&name) fmt.Println(name) // 小明}運行結果:
請輸入你的姓名:小明小明使用 ?
?name?
? 變量接收輸入的值Scanfimport "fmt"func main() { var name string var age int fmt.Println("請輸入你的姓名和性別:") fmt.Scanf("%s%d", &name, &age) fmt.Println(name, age) // 小明}運行結果:
請輸入你的姓名和性別:小明 18小明 18
使用占位符 ??%s?
?? 和 ??%d?
?? 分別指定將字符串和整型的數據賦值給 ??name?
?? 和 ??age?
?。
import "fmt"func main() { var name string fmt.Println("請輸入你的姓名:") fmt.Scanln(&name) fmt.Println(name) // 小明}
和 ??Scan?
? 是類似的,只不過它遇到換行符后就停止掃描。
import "fmt"func main() { var name string var age int fmt.Sscan("小明 20", &name, &age) fmt.Println(name, age) // 小明 20 fmt.Sscanf("小紅 18", "%s%d", &name, &age) fmt.Println(name, age) // 小紅 18 fmt.Sscanln("小剛 21", &name, &age) fmt.Println(name, age) // 小剛 21}
這三個輸入函數和上面介紹的類似,只不過這三個是從字符串里面讀取的內容。
本篇文章對 fmt 標準庫的常用輸入函數進行了介紹。輸入函數分三類介紹,第一類是從文件獲取輸入的內容,第二類是從標準輸入獲取輸入的內容,第三類是從字符串里獲取輸入的內容。并給出簡單的示例代碼。