Go语言中的IO操作及Flag包的用法

作者:奋斗的大橙子 时间:2024-04-27 15:31:31 

一、格式化输入和输出

1.从终端获取用户的输入

fmt.Scanf 空格作为分隔符,占位符和格式化输出的一致

fmt.Scan 从终端获取用户的输入,存储在Scanln中的参数里,空格和换行符作为分隔符

fmt.Scanln 从终端获取用户的输入,存储在Scanln中的参数里,空格作为分隔符,换行符作为结束

Scanf 例子:

package main

import (
  "fmt"
)

func TestScanf(){
  var a int
  var b string
  var c float32
  fmt.Scanf("%d%s%f",&a,&b,&c)
  fmt.Printf("a=%d b=%s c=%f",a,b,c)
}

func main(){
  TestScanf()
}

结果:

> 111 abvc 111
a=111 b=abvc c=111.000000

这里我们是通过一行输入的,并且是以空格作为分割的,但是如果想通过多行输入,那么在Windows下Scanf可能会存在一个问题,如下:

func TestScanf(){
  var a int
  var b string
  var c float32
  fmt.Scanf("%d",&a)
  fmt.Scanf("%s",&b)
  fmt.Scanf("%f",&c)
  fmt.Printf("a=%d b=%s c=%f",a,b,c)
}

然后我们在windows下面去运行一下

Go语言中的IO操作及Flag包的用法

由上面的我们可以看到,只接受到了第一个值,第二值输入之后回车,发现b和c都没有值。主要是由于Windows下面,回车会 自动加上 \r\n。

如果想要正确的获取这个值,可以修改如下:在每一个scanf上面都加上“\n”

func TestScanf(){
  var a int
  var b string
  var c float32
  fmt.Scanf("%d\n",&a)
  fmt.Scanf("%s\n",&b)
  fmt.Scanf("%f\n",&c)
  fmt.Printf("a=%d b=%s c=%f \n",a,b,c)
}

Scan例子:

func TestScan(){
  var a int
  var b string
  var c float32
  fmt.Scan(&a,&b,&c)
  fmt.Printf("a=%d b=%s c=%f \n",a,b,c)
}

Scanln例子:

func TestScanln(){
  var a int
  var b string
  var c float32
  fmt.Scanln(&a)
  fmt.Scanln(&b)
  fmt.Scanln(&c)
  fmt.Printf("a=%d b=%s c=%f \n",a,b,c)
}

2.从字符串中获取

上面是从终端输入的字符串中提取数据,然后还可以从一个已经存在的字符串中提取。

fmt.Sscanf 空格作为分隔符,占位符和格式化输出的一致

fmt.Sscan 从字符串获取用户的输入,存储在Scanln中的参数里,空格和换行符作为分隔符

fmt.Sscanln 从字符串获取用户的输入,存储在Scanln中的参数里,空格作为分隔符,换行符作为结束

下面的例子就是从str中提取整数、字符串和浮点数

func TestSscanf(){
  var a int
  var b string
  var c float32
  str := "123 hello 111.1"
  fmt.Sscanf(str,"%d%s%f",&a,&b,&c)
  fmt.Printf("a=%d b=%s c=%f \n",a,b,c)
}

备注:一定要传地址进去,否则修改是变量的副本,也就是说读取不到用户的输入了。

3.从文件中获取

fmt.Fscanf 空格作为分隔符,占位符和格式化输出的一致

fmt.Fscan 从文件获取用户的输入,存储在Scanln中的参数里,空格和换行符作为分隔符

fmt.Fscanln 从文件获取用户的输入,存储在Scanln中的参数里,空格作为分隔符,换行符作为结束

4.终端输入输出的原理

终端相当于是一个文件, 所以可以用 os.stdin 和os.stdout 作为输入和输出。查看源码可以看到他们其实就是*File

二、bufio包的使用

为了完善文件本身读取性能差的问题,增加了缓冲区操作。

package main

import (
  "bufio"
  "os"
)

func main() {
  reader := bufio.NewReader(os.Stdin)
  buf, _ := reader.ReadBytes('\n')
  println((string)(buf))
}

备注:这里可以看到NewReader的参数是一个io.Reader接口 , os.Stdin则是返回一个*File ,由于File实现了io.Reader的Read方法,所以可以接受File作为参数(鸭子类型)。

来源:https://www.cnblogs.com/dcz2015/p/11212611.html

标签:Go,Golang,IO,操作,Flag,包
0
投稿

猜你喜欢

  • Python装饰器基础概念与用法详解

    2021-07-07 12:32:46
  • golang之数组切片的具体用法

    2024-04-29 13:06:43
  • django搭建项目配置环境和创建表过程详解

    2022-10-26 19:03:25
  • js实现局部页面打印预览原理及示例代码

    2024-04-25 13:13:48
  • Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析

    2021-09-20 22:47:57
  • python文件比较示例分享

    2023-03-17 21:10:23
  • selenium+python自动化测试之页面元素定位

    2021-09-30 18:08:55
  • Mysql服务器的安装配置与启动关闭方法详解

    2024-01-28 05:10:26
  • django的model操作汇整详解

    2022-05-16 03:59:46
  • LotusPhp笔记之:基于ObjectUtil组件的使用分析

    2023-11-19 09:18:32
  • 如何搜索查找并解决Django相关的问题

    2022-02-12 09:58:51
  • 10个提高网站可用性的实用技巧[译]

    2009-06-12 12:37:00
  • echarts图表设置宽度100%结果为100px的解决办法

    2024-04-18 09:50:19
  • 使用pickle存储数据dump 和 load实例讲解

    2023-05-19 18:50:18
  • Python 2.7中文显示与处理方法

    2021-06-14 16:07:39
  • chatGPT与传统搜索结合创建新一代搜索引擎

    2022-06-15 18:54:27
  • 设置iframe的document.designMode后仅Firefox中其body.innerHTML为br

    2024-05-02 16:17:31
  • Python实现解析命令行参数的常见方法总结

    2023-10-15 12:31:49
  • pycharm激活码2020最新分享适用pycharm2020最新版亲测可用

    2021-09-21 11:11:33
  • 如何基于Python pygame实现动画跑马灯

    2023-09-07 18:56:59
  • asp之家 网络编程 m.aspxhome.com