6-7 使用函数输出水仙花数_Go语言fmt.Printf使用指南

039b02f3e84b60a44d336c5e9a123a6d.png

fmt标准库是我们在学习Go语言过程中接触最早最频繁的一个了,本文介绍了fmtb包的一些常用函数。

fmt

fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。

向外输出

标准库fmt提供了以下几种输出相关函数。

Print

Print系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符串,Println函数会在输出内容的结尾添加一个换行符。

0033d7c283155556d0bfdb1653af0464.png

举个简单的例子:

9e1d684e1f309d4be2e3306851b8b2c3.png

执行上面的代码输出:

e5a027207d7c696f54c5a90581f8ca60.png

Fprint

Fprint系列函数会将内容输出到一个io.Writer接口类型的变量w中,我们通常用这个函数往文件中写入内容。

68685651a05cdf3df7309d23aab76ef1.png

举个例子:

5442e1efcb9ae92c913c467240e386f4.png

注意,只要满足io.Writer接口的类型都支持写入。

Sprint

Sprint系列函数会把传入的数据生成并返回一个字符串。

9e7fec1c18a483986ba87dac05f2d7ff.png

简单的示例代码如下:

d99850353552e5c73bf1154bfc1489b3.png

Errorf

Errorf函数根据format参数生成格式化字符串并返回一个包含该字符串的错误。

func Errorf(format string, a ...interface{}) error

通常使用这种方式来自定义错误类型,例如:

err := fmt.Errorf("这是一个错误")

格式化占位符

*printf系列函数都支持format格式化参数,在这里我们按照占位符将被替换的变量类型划分,方便查询和记忆。

通用占位符

6d7472749f094f08e520edda33b83cfb.png

示例代码如下:

278609bbcadd3a4fa4d5641f7b56b246.png

输出结果如下:

ddac42a81c97a71098c988ac96a26ae3.png

布尔型

45bb063efbf253f3ffb2822948f578a1.png

整型

74dd9e302b46f113e64665d74bd5d033.png

示例代码如下:

bd044063803e9cc9ff3a5943e260fc7d.png

输出结果如下:

834b731dba1fa751c351c59d1fe30364.png

浮点数与复数

14065f75dbdaa008a2f4a6ecf6182c7b.png

示例代码如下:

a4512cc6f9806d01ec8a9e19786aa735.png

输出结果如下:

11b07f920367766cb49e107ae1014ded.png

字符串和[]byte

1096a787e1c0f231c68148bd521b6fdf.png

示例代码如下:

fd1032287d28f6a76a931df163dce58c.png

输出结果如下:

253fe6a8d9a7e0606424807c47d4aa32.png

指针

7361b2a429a929e1e02d4fca68312f0e.png

示例代码如下:

9ab16ece841cac92fe4e7ef48c6cfd2c.png

输出结果如下:

dcf0667ff853a179ad8ed2c7c1ef9c4c.png

宽度标识符

宽度通过一个紧跟在百分号后面的十进制数指定,如果未指定宽度,则表示值时除必需之外不作填充。精度通过(可选的)宽度后跟点号后跟的十进制数指定。如果未指定精度,会使用默认精度;如果点号后没有跟数字,表示精度为0。举例如下:

e981185f6eedf72a851a46a57f53a356.png

示例代码如下:

9464b88e2d551a6191fbd3aeeba903d5.png

输出结果如下:

90403a70c9ac43f6dccb38c739436311.png

其他falg

c717b8ccad2681158d1273a456d8e051.png

举个例子:

848933d8a531825e67b469f3756c658b.png

输出结果如下:

cd1cd23b1cc785fc9136e63a8f4a016d.png

获取输入

Go语言fmt包下有fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,可以在程序运行过程中从标准输入获取用户的输入。

fmt.Scan

函数定签名如下:

ed876a14ebb2fcd20a9a59994c543027.png
  • Scan从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。
  • 本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。

具体代码示例如下:

87b51671c8b58477f70a5d396bf7c379.png

将上面的代码编译后在终端执行,在终端依次输入小王子、28和false使用空格分隔。

b2b02147a44822dc729841e1f2fd7855.png

fmt.Scan从标准输入中扫描用户输入的数据,将以空白符分隔的数据分别存入指定的参数。

fmt.Scanf

函数签名如下:

8fe06fc1fea5ba8a9ff14821080cf104.png
  • Scanf从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。
  • 本函数返回成功扫描的数据个数和遇到的任何错误。

代码示例如下:

237831f1d35f5ae0b66e2dc3742380cc.png

将上面的代码编译后在终端执行,在终端按照指定的格式依次输入小王子、28和false。

9096377a1bdb743b1da38601b08793cd.png

fmt.Scanf不同于fmt.Scan简单的以空格作为输入数据的分隔符,fmt.Scanf为输入数据指定了具体的输入内容格式,只有按照格式输入数据才会被扫描并存入对应变量。

例如,我们还是按照上个示例中以空格分隔的方式输入,fmt.Scanf就不能正确扫描到输入的数据。

11bb2602432bed0b3c373fc659cf8179.png

fmt.Scanln

函数签名如下:

475f027088d00b32bdb52fe7685b6e96.png
  • Scanln类似Scan,它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
  • 本函数返回成功扫描的数据个数和遇到的任何错误。

具体代码示例如下:

0f4857d679ef19a602f18148a03fa088.png

将上面的代码编译后在终端执行,在终端依次输入小王子、28和false使用空格分隔。

458ce24d21a6293deac78586172e1c4e.png

fmt.Scanln遇到回车就结束扫描了,这个比较常用。

bufio.NewReader

有时候我们想完整获取输入的内容,而输入的内容可能包含空格,这种情况下可以使用bufio包来实现。示例代码如下:

eebd1bdcb4730f663eaf278daeb2008d.png

Fscan系列

这几个函数功能分别类似于fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,只不过它们不是从标准输入中读取数据而是从io.Reader中读取数据。

04cb070a3e505e1753f0d2b8564cd23c.png

Sscan系列

这几个函数功能分别类似于fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,只不过它们不是从标准输入中读取数据而是从指定字符串中读取数据。

63e12a30eabf2e8bf373ae99248b8be2.png

原文链接:https://www.liwenzhou.com/posts/Go/go_fmt/

本文作者:李文周,原创授权发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值