Go-基础-标准输入输出

本文主要参考CSDN以及golang官方文档书写,主要是fmt包提供的标准输入输出的笔记;
fmt.Scan/Sscan/Fscan 以及对应的*f,*ln和print类族

一. 标准输入 [return (n int, err error)]

1. fmt.Scan/fmt.Scanf/fmt.Scanln
这三个方法接收n个指针类型的参数(包括string 指针)将os.Stdin 输入内容传入 参数变量中;
使用指针的目的是为确保基本类型的输入能够真正修改输入的变量;
var i int
fmt.Scan(&i)
fmt.Scanf("%d",&i)
fmt.Scanln(&i)
2. fmt.Sscan/fmt.Sscanf/fmt.Sscanln
这三个方法是从string 中读取值,用将string取代 标准输入;
s := "abc 1 2"
var s_ string
var i,j int
fmt.Sscan(s,&s_,&i,&j)
fmt.Sscanf(s,"%s $d $d",&s_,&i,&j)
fmt.Sscanln(s,&s_,&i,&j)
3. fmt.Fscan/fmt.Fscanf/fmt.Fscanln
这三个方法则是通过在提供的实现了io.Reader 接口的Read方法的输入源中输入整体类似```fmt.Sscan```
var i int
fmt.Fscan(os.Stdin,&i)
fmt.Fscanf(os.Stdin,"%d",&i)
fmt.Fscanln(os.Stdin,&i)
4. bufio.Reader.Readxxx
使用类似```fmt.Fscan```的方法,通过读取标准Stdin 输入进行输入,
使用bufio 的目的是它可以设置部分读取后部分处理然后再处理后面的内容,
中间出现类型或者格式错误依旧可以处理
in := bufio.NewReader(os.Stdin)
ret,err := in.ReadString('\n')//这里是分隔符作为参数,会将分隔符作为空格使用
/*
	此外还有
	bufio.Reader.Read(p []byte) (n int, err error)
	bufio.Reader.ReadByte() (byte, error)
	bufio.Reader.ReadBytes(delim byte) ([]byte, error)
	....
*/
5.总结

对于fmt.*scan*系列,遇到错误(类型或者格式上的错误)会将不会重新读取输入除非换输入源;想要避免这个问题可以使用换源或者使用bufio 作为输入字符串然后进行解析的方式避免

二. 标准输出

由于输入输出比较类似,所以仅仅列举输出方法,与输入的区别主要体现在返回值的不同上
// @return n int, err error 
fmt.Print 
fmt.Println
fmt.Printf // 由于输出仅需要值传递所以使用原数值进行值传递
//@return s string
fmt.Sprint(a...interface{})
fmt.Sprintf(format string, a...interface{})
fmt.Sprintln(a...interface{})
//@return n int,err error | 这一簇是通过将向实现了io.Writer接口(即其Write方法)的对象源中输入值
fmt.Fprint(io.Writer,a...interface{})
fmt.Fprintf(io.Writer,format string, a...interface{})
fmt.Fprintln(io.Writer,a...interface{})
//此种方法下依旧可以使用bufuio或者io等方法
bufio.NewWriter(io.Writer)
bufio.NewWriterSize(io.Writer,size)
//out.Write([]byte) (n int,err error)
//out.WriteString(data string) (n int, err error)
//注意此处,完全输出最好需要Flush

三. io.Reader/io.Writer

io.Reader:
type Reader interface{
	Read(p []byte)(n int, err error)
}
io.Writer:
type Writer interface{
	Write(p []byte)(n int,err error)
}

补充:

  1. 格式化对照表
%% : 一个%字面量
%b  : 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数
%c  : 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符
%d  : 一个十进制数值(基数为10)
%e  : 以科学记数法e表示的浮点数或者复数值
%E  : 以科学记数法E表示的浮点数或者复数值
%f   : 以标准记数法表示的浮点数或者复数值
%g  : 以%e或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出
%G  : 以%E或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出
%o   : 一个以八进制表示的数字(基数为8)
%p   : 以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示
%q   : 使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字
%s    : 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)
%t    : 以true或者false输出的布尔值
%T   : 使用Go语法输出的值的类型
%U   : 一个用Unicode表示法表示的整型码点,默认值为4个数字字符
%v   : 使用默认格式输出的内置或者自定义类型的值,或者是使用其类型的String()方式输出的自定义值,如果该方法存在的话
%x   : 以十六进制表示的整型值(基数为十六),数字a-f使用小写表示
%X   : 以十六进制表示的整型值(基数为十六),数字A-F使用小写表示
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值