一文了解 Go fmt 标准库输入函数的使用
【摘要】 本篇文章对 fmt 标准库的常用输入函数进行了介绍。输入函数分三类介绍,第一类是从文件获取输入的内容,第二类是从标准输入获取输入的内容,第三类是从字符串里获取输入的内容。并给出简单的示例代码。
作者:陈明勇
专注分享后端知识,如果文章对您有帮助,欢迎点赞收藏加关注,一起学习,一起进步!
fmt 输入函数
函数 | 描述 |
---|---|
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 |
Fscan、Fscanf、Fscanln
- Fscan
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
的地址传递进去,而不是值传递。
- Fscanf
通过占位符 %d,将文件里的内容赋值给import ( "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 }
num1
和num2
变量。 - Fscanln
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
。
Scan、Scanf、Scanln
- Scan
import "fmt" func main() { var name string fmt.Println("请输入你的姓名:") fmt.Scan(&name) fmt.Println(name) // 小明 }
- 运行结果:
使用请输入你的姓名: 小明 小明
name
变量接收输入的值
- 运行结果:
- Scanf
import "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
。 - Scanln
和import "fmt" func main() { var name string fmt.Println("请输入你的姓名:") fmt.Scanln(&name) fmt.Println(name) // 小明 }
Scan
是类似的,只不过它遇到换行符后就停止扫描。
Sscan、Sscanf、Sscanln
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 标准库的常用输入函数进行了介绍。输入函数分三类介绍,第一类是从文件获取输入的内容,第二类是从标准输入获取输入的内容,第三类是从字符串里获取输入的内容。并给出简单的示例代码。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)