🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] fmt 用类似于C的printf和scanf的函数实现格式化的I/O。 ## 输出函数 `Print` 系列的输出函数 ```go func Print(a ...any) (n int, err error) // 打印内容 func Printf(format string, a ...any) (n int, err error) // 格式化打印内容 func Println(a ...any) (n int, err error) // 打印内容,默认带换行符。 ``` `Sprint` 系列的输出函数 ```go func Sprint(a ...any) string // 返回字符串的内容 func Sprintf(format string, a ...any) string // 返回字符串的格式化内容 func Sprintln(a ...any) string // 返回字符串的内容,默认带换行符 ``` `Fprint` 系列的输出函数 ```go func Fprint(w io.Writer, a ...any) (n int, err error) // 将内容a,写入w。返回写入字节数以及err信息 func Fprintf(w io.Writer, format string, a ...any) (n int, err error) // 将格式化内容a,写入w。返回写入字节数以及err信息 func Fprintln(w io.Writer, a ...any) (n int, err error) // 将内容a(默认带换行符),写入w。返回写入字节数以及err信息 ``` 输出函数示例 ```go package main import ( "fmt" "os" ) func main() { // Print 系列的输出函数 name := "jiaxzeng" fmt.Print("hello ", name, "\n") fmt.Printf("hello %s\n", name) fmt.Println("hello", name) // Sprint 系列的输出函数 fmt.Print("\n-------------------------------------\n") s := fmt.Sprint("hello ", name) fmt.Printf("s: %v\n", s) s = fmt.Sprintf("hello %s", name) fmt.Printf("s: %v\n", s) s = fmt.Sprintln("hello", name) fmt.Printf("s: %v\n", s) // Fprint 系列的输出函数 fmt.Print("\n-------------------------------------\n") n, err := fmt.Fprint(os.Stdin, "hello ", name, ", ") if err != nil { fmt.Printf("Fprint failed, err: %v", err) } else { fmt.Printf("Byte size: %v\n", n) } n, err = fmt.Fprintf(os.Stdout, "hello %v, ", name) if err != nil { fmt.Printf("Fprint failed, err: %v", err) } else { fmt.Printf("Byte size: %v\n", n) } n, err = fmt.Fprintln(os.Stdout, "hello", name) if err != nil { fmt.Printf("Fprint failed, err: %v", err) } else { fmt.Printf("Byte size: %v\n", n) } } // 运行结果 // hello jiaxzeng // hello jiaxzeng // hello jiaxzeng // ------------------------------------- // s: hello jiaxzeng // s: hello jiaxzeng // s: hello jiaxzeng // ------------------------------------- // hello jiaxzeng, Byte size: 16 // hello jiaxzeng, Byte size: 16 // hello jiaxzeng // Byte size: 15 ``` ## 输入函数 `Scan` 系列的输入函数 > 从 os.Stdin 赋值给 变量a ```go func Scan(a ...any) (n int, err error) // 变量a 是多个时,分割符可以是换行或空格 func Scanf(format string, a ...any) (n int, err error) // 格式化字符串时,连接符需要与字符串隔开;变量a 是多个时,只能一行输入且需要输入指定的分隔符。 func Scanln(a ...any) (n int, err error) // 变量a 是多个时,分隔符只能是空格。 ``` `Sscan` 系列的输入函数 > 从 字符串str 赋值给 变量a ```go // 变量str 包含\n \t 空格,当做分割符识别对应的参数个数 func Sscan(str string, a ...any) (n int, err error) // 变量str 包含\n \t 空格时,格式化字符串也需要对应个数的\n \t 空格。 func Sscanf(str string, format string, a ...any) (n int, err error) // 与Sscan类似,但是变量str不能包含 \n func Sscanln(str string, a ...any) (n int, err error) ``` `Fscan` 系列的输入函数 > 从 `io.Reader` 赋值给 变量a ,`io.Reader` 可以通过 `strings.NewReader` 函数返回得到。 ```go // 变量r 包含\n \t 空格,当做分割符识别对应的参数个数 func Fscan(r io.Reader, a ...any) (n int, err error) // 变量r 包含\n \t 空格时,格式化字符串也需要对应个数的\n \t 空格。 func Fscanf(r io.Reader, format string, a ...any) (n int, err error) // 与Fscan类似,但是变量r不能包含 \n func Fscanln(r io.Reader, a ...any) (n int, err error) ``` 输入函数示例 ```go package main import ( "fmt" "os" "strings" ) func main() { // Scan 系列的输入函数 fmt.Print("\n-------------------------------------\n") var ( i int str string ) fmt.Print("请输入数据: ") // fmt.Scan(&str, &i) // fmt.Scanf("%s + %d", &str, &i) fmt.Scanln(&str, &i) fmt.Printf("type is: %T, value is: %v\n", str, str) fmt.Printf("type is: %T, value is: %v\n", i, i) // Sscan 系列的输入函数 fmt.Print("\n-------------------------------------\n") fmt.Sscan("jiaxzeng \n 323", &str, &i) fmt.Sscanf("jiaxzeng age is 18.", "%s age is %d.", &str, &i) fmt.Sscanln("jiaxzeng \n 456", &str, &i) fmt.Println(str, i) // Fscan 系列的输入函数 fmt.Print("\n-------------------------------------\n") reader := strings.NewReader("xiaodunan \n 18") fmt.Fscan(reader, &str, &i) fmt.Printf("%s age is %d\n", str, i) reader = strings.NewReader("xiaodunan is 18") fmt.Fscanf(reader, "%s is %d", &str, &i) fmt.Printf("%s age is %d\n", str, i) reader = strings.NewReader("xiaodunan \n 18") fmt.Fscanln(reader, &str, &i) fmt.Printf("%s age is %d\n", str, i) } // 运行结果 // ------------------------------------- // 请输入数据: test // type is: string, value is: test // type is: int, value is: 0 // ------------------------------------- // jiaxzeng 18 // ------------------------------------- // xiaodunan age is 18 // xiaodunan age is 18 // xiaodunan age is 18 ```