Go语言中 Scan 与 Scanf 和 Scanln的区别
文章目录
Golang语法
前言
博主介绍:
– 我是了 凡 微信公众号【了凡银河系】期待你的关注。未来大家一起加油啊~
三种输入函数的区别#
首先它们都是在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)
错误显示:
欢迎大家留言探讨
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具