go语言输入输出与控制流
go语言输入输出
输入
fmt包的输入
1 | fmt.Scanf("%d %f %s %t %c", &a, &b, &str, &c, &d) //格式化输入,与C相同 |
main函数传参
通过OS包的Args获取main的参数(此方法不能确定参数类型)
os.Args是一个[]string类型,命令行中的参数会被写入到os.Args数据中
1 | func main(){ |
通过flag包的Parse()获取参数(此方法可以指定类型,携带tag)
需要声明参数对应的类型和格式
1 | var b = flag.String("b","","string参数") //返回指针 |
1 | go run main.go -b 123456 |
bufio输入
bufio是带有缓冲的输入输出流,这里只讨论输入
1 | reader = bufio.NewReader(os.stdin)//接受键盘(终端)输入,根据需求可以换为链接、文件等 |
输出
fmt包的输出
1 | fmt.Printf()//格式化输出,与C相同 |
bufio输出
bufio是带有缓冲的输入输出流,这里只讨论输出
1 | writer = bufio.NewWriter(os.stdout)//输出到终端,可以根据需求换为链接、文件等 |
go语言控制流
if-else
与C语言无异,只要求必须携带{}且判断式不带()
循环
与C语言的for循环无异,只要求判断式不带()
switch
与C语言的switch case无异,只是case自带break,且判断式更加灵活
不带判断式的switch可以等效成多个if-else
defer
defer 语句用于延迟函数的执行,直到包含 defer 的函数即将返回时执行。
当有多个 defer 调用时,它们会按照后进先出(LIFO)的顺序执行:
1 | func main() { |
结果为:
1 | Function body |
defer常用于关闭连接、文件等,可以有效避免泄露
defer 和匿名函数常用于捕获和处理错误,特别是用于捕获 panic 并恢复程序的执行:
1 | func main() { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 AliveRiver!
