Go语言(四)输入输出

Go语言输入输出

本篇涉及函数的知识,不过没有影响

package fmt

fmt包实现了类似C语言printf和scanf的格式化I/O。格式化动作('verb')源自C语言但更简单。

fmt.Println函数我们知道是打印换行的函数。

文档中是这样的:

func Println(a ...interface{}) (n int, err error)

** a …interface{} 的意思是接受任意类型的参数, *(n int, err error) 代表这个函数返回的参数 **

一、输出

标准输出

常用的标准输出函数有以下三种,都会将数据输出到标准设备,如屏幕。

都是以P开头的函数,用法基本相同。

值得一提的是go语言通过大小写来决定公开程度,如大写字母开头即代表public

	fmt.Println()//输出任意类型数据,并换行
	fmt.Print()  //输出任意类型数据,不换行
	fmt.Printf()//格式化输出数据,不换行

如下:

	fmt.Println("我是fmt.Println()输出的数据,我换行啦")
	fmt.Print("我是fmt.Print()输出的数据,我不换行")
	fmt.Printf("我是	fmt.Printf()输出的数据,格式化输出不换行。。。%s","ha")


我是fmt.Println()输出的数据,我换行啦
我是fmt.Print()输出的数据,我不换行我是	fmt.Printf()输出的数据,格式化输出不换行。。。ha

当然fmt.Print()这些不换行你可以通过转义字符来控制换行,如\n等

非标准输出

也有其他输出,比如Fprintf等,这我们将在后面接触。

Fprintf根据format参数生成格式化的字符串并写入w。返回写入的字节数和遇到的任何错误。

func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)

二、输入

标准输入
	fmt.Scan()//扫描,必须所有参数都被填充后换行才结束扫描
	fmt.Scanln()//扫描,但是遇到换行就结束扫描
	fmt.Scanf()//格式化扫描,换行就结束

??注意以上都是需要使用地址来取得扫描到的数据哈

如fmt.Scan(&x,&y)

分别演示一下

Scan

func main()  {

	var(
		x,y string
	)
	
	fmt.Println("输入两个字符串:")
	fmt.Scan(&x,&y)

	fmt.Println("x :"+x)
	fmt.Println(" y:"+y)

}

结果如下,必须接受两个值才可以结束。输入一个值换行不会结束。

输入两个字符串:
he  

ok
x :he
 y:ok

Scanln

func main()  {
	var(
		x,y string
		z string
	)

	fmt.Println("输入三个字符串:")
	fmt.Scanln(&x,&y,&z)

	fmt.Println("x :"+x)
	fmt.Println(" y:"+y)
	fmt.Println("z:"+z)

}

只要换行就结束

输入三个字符串:
ha yes lala
x :ha
 y:yes
z:lala

//只输入一个字符串也结束
输入三个字符串:
eee
x :eee
 y:
z:

Scanf

func main()  {

	var(
		x,y string
		z string
	)


	fmt.Println("输入三个字符串:")
	fmt.Scanf("%s %s %s",&x,&y,&z)

	fmt.Println("x :"+x)
	fmt.Println(" y:"+y)
	fmt.Println("z:"+z)

}

格式化输入,只要换行就结束

输入三个字符串:
ha la hou 
x :ha
 y:la
z:hou


//只输入一个字符串也结束
输入三个字符串:
eee
x :eee
 y:
z:


非标准输入

如 Fscanf等

func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)

Fscanf从r扫描文本,根据format 参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。

输入输出流

以上标准输入都是fmt包下的,fmt包比较方便

当然也可以通过输入流解决,如下输入:

func main() {
	inputReader := bufio.NewReader(os.Stdin) // 使用了自动类型推导,不需要var关键字声明
	//inputReader = bufio.NewReader(os.Stdin)

	fmt.Println("Please input your name: ")

	//input, err = inputReader.ReadString('\n')
	input, err := inputReader.ReadString('\n')

	if err == nil {
		fmt.Printf("Your name is: %s\n", input)
	}
}


这是输入输出流,在处理复杂数据流的时候很给力,处理简单文本数据就显得比较繁琐了,所以fmt包就是简化版的输入输出,对我们常用的的数据处理进行的封装。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值