Go语言格式化输出

在Go语言中格式化输出通常使用 fmt 包,通用的输出格式如下表所示:

表:通用输出格式
输出格式 输出内容
%v 值的默认格式表示
%+v 类似 %v,但输出结构体时会添加字段名
%#v 值的 Go 语法表示
值的类型的 Go 语法表示
package main
import "fmt"
func main() {str := "steven"fmt.Printf("%T, %v \n", str, str)var a rune = '一'fmt.Printf("%T, %v \n", a, a)var b byte = 'b'fmt.Printf("%T, %v \n", b, b)var c int32 = 98fmt.Printf("%T, %v \n", c, c)
}// 结果
string, steven
int32, 19968
uint8, 98
int32, 98

格式化输出布尔类型

表:布尔类型输出格式
输出格式 输出内容
%t 单词 true 或 false
package main
import "fmt"
func main() {var flag boolfmt.Printf("%T, %t \n", flag, flag)flag = truefmt.Printf("%T, %t \n", flag, flag)
}// 结果
bool, false
bool, true

格式化输出整数类型

表:整型的输出格式
输出格式 输出内容
%b 表示为二进制
%c 该值对应的 unicode 码值
%d 表示为十进制
%8d 表示该整型长度是 8,不足 8 则在数值前补空格;如果超出 8,则以实际为准
%08d 表示该整型长度是 8,不足 8 则在数值前补 0;如果超出 8,则以实际为准
%o 表示为八进制
%q 该值对应的单引号括起来的Go语言语法字符字面值,必要时会采用安全的转义表示
%x 表示为十六进制,使用 a~f
%X 表示为十六进制,使用 A~F
%U 表示为 unicode 格式:U+1234,等价于 U+%04X
package main
import "fmt"
func main() {fmt.Printf("%T, %d \n", 123, 123)fmt.Printf("%T, %5d \n", 123, 123)fmt.Printf("%T, %05d \n", 123, 123)fmt.Printf("%T, %b \n", 123, 123)fmt.Printf("%T, %o \n", 123, 123)fmt.Printf("%T, %c \n", 97, 97)fmt.Printf("%T, %q \n", 97, 97)fmt.Printf("%T, %x \n", 123, 123)fmt.Printf("%T, %X \n", 123, 123)fmt.Printf("%T, %U \n", '一', '一')
}// 结果
int, 123
int,   123
int, 00123
int, 1111011
int, 173
int, a
int, 'a'
int, 7b
int, 7B
int32, U+4E00

格式化输出浮点型与复数型

表:浮点型输出格式
输出格式 输出内容
%b 无小数部分、二进制指数的科学计数法,如 -123456p-78
%e (=%.6e)有 6 位小数部分的科学计数法,如 -1234.456e+78
%E 科学计数法,如 -1234.456E+78
%f  (=%.6f)有 6 位小数部分,如 123.456123
%F 等价于 %f
%g 根据实际情况采用 %e 或 %f 格式(获得更简洁、准确的输出)
%G 根据实际情况采用 %E 或 %F 格式(获得更简洁、准确的输出)
package main
import "fmt"
func main() {fmt.Printf("%b \n", 123.123456)fmt.Printf("%f \n", 123.1)fmt.Printf("%.2f \n", 123.125456)fmt.Printf("%e \n", 123.123456)fmt.Printf("%E \n", 123.123456)fmt.Printf("%.1e \n", 123.123456)fmt.Printf("%F \n", 123.123456)fmt.Printf("%g \n", 123.123456)fmt.Printf("%G \n", 123.123456)
}// 结果
8664042977533870p-46
123.100000
123.13
1.231235e+02
1.231235E+02
1.2e+02
123.123456
123.123456
123.123456

格式化输出字符串与字节数组

表:字符串输出格式
输出格式 输出内容
%s 直接输出字符串或者字节数组
%q 该值对应的双引号括起来的Go语法字符串字面值,必要时会采用安全的转义表示
%x 每个字节用两字符十六进制数表示,使用 a~f
%X 每个字节用两字符十六进制数表示,使用 A~F
package main
import "fmt"
func main() {arr := []byte{'x', 'y', 'z', 'z'}fmt.Printf("%s \n", "欢迎访问")fmt.Printf("%q \n", "欢迎访问")fmt.Printf("%x \n", "欢迎访问")fmt.Printf("%X \n", "欢迎访问")fmt.Printf("%T, %s \n", arr, arr)fmt.Printf("%T, %q \n", arr, arr)fmt.Printf("%T, %x \n", arr, arr)fmt.Printf("%T, %X \n", arr, arr)
}//
欢迎访问
"欢迎访问"
e6aca2e8bf8ee8aebfe997aee5beaee5ada6e88b91
E6ACA2E8BF8EE8AEBFE997AEE5BEAEE5ADA6E88B91
[]uint8, xyzz
[]uint8, "xyzz"
[]uint8, 78797a7a
[]uint8, 78797A7A

fmt

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

向外输出

Print

Print系列函数会将内容输出到系统的标准输出,区别在于:

  1. Print函数直接输出内容,
  2. Printf函数支持格式化输出字符串,
  3. Println函数会在输出内容的结尾添加一个换行符。
func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)

Fprint

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

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

只要满足io.Writer接口的类型都支持写入,包括web io。

Sprint

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

func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string

Errorf

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

func Errorf(format string, a ...interface{}) error
e := errors.New("原始错误e")
w := fmt.Errorf("Wrap了一个错误%w", e)

获取输入

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

fmt.Scan

func Scan(a ...interface{}) (n int, err error)
  1. Scan从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。
  2. 本函数返回成功扫描的数据个数和遇到的任何错误。
  3. 如果读取的数据个数比提供的参数少,会返回一个错误报告原因。
func main() {var (name    stringage     intmarried bool)fmt.Scan(&name, &age, &married)fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age, married)
}

fmt.Scanf

func Scanf(format string, a ...interface{}) (n int, err error)

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

func main() {var (name    stringage     intmarried bool)fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &married)fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age, married)
}// 输入:1:General_zy 2:21 3:false

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

fmt.Scanln(常用)

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

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

func main() {var (name    stringage     intmarried bool)fmt.Scanln(&name, &age, &married)fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age, married)
}

bufio.NewReader

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

func bufioDemo() {reader := bufio.NewReader(os.Stdin) // 从标准输入生成读对象fmt.Print("请输入内容:")text, _ := reader.ReadString('\n') // 读到换行text = strings.TrimSpace(text)fmt.Printf("%#v\n", text)
}

Go语言格式化输出(fmt)相关推荐

  1. go语言 格式化输出fmt.Printf()使用大全

    [简介] fmt 包实现了格式化 I/O 函数,类似于 C 的 printf 和 scanf.格式"占位符"衍生自 C,但比 C 更简单. [打印] 占位符: [一般] %v 相应 ...

  2. c语言直接输出PDF,C语言格式化输出总结.pdf

    C C 语言格式化输出总结语言格式化输出总结 一 一 printf printf 函数函数9 S4 Y N4 r S V0 I w printf 函数是格式化输出函数 一般用于向标准输出设备按规定格式 ...

  3. c语言中字符串格式输出有负号,C语言格式化输出

    C语言格式化输出 printf()格式化输出详解 本文来 自:http://www.kuqin.com/language/20080420/7060.html printf的格式控制的完整格式: % ...

  4. golang格式化输出-fmt包用法详解

    注意:我在这里给出golang查询关于包的使用的地址:https://godoc.org    声明: 此片文章并非原创,大多数内容都是来自:https://godoc.org/fmt,通过谷歌翻译进 ...

  5. c语言格式化字符串,C语言格式化输出小结

    函数说明 在gcc编程中,我们常用到的字符格式化输出函数是printf的,实际上gcc继承了C语言处理字符具有强大功能的风格,它提供了一系列的格式化输出函数,主要存在两个库函数文件stdio.h/ s ...

  6. python语言格式化输出_Python format()格式化输出方法详解

    原标题:Python format()格式化输出方法详解 format() 方法的语法格式如下: str.format(args) 此方法中,str 用于指定字符串的显示样式:args 用于指定要进行 ...

  7. C语言格式化输出以及%宏替换

    在初学C语言的时候,我们会接触到很多格式化输出.如%c,%t,%s,%d等等. 当然这些都是比较基本的用法.现在讲下相对比较晦涩的%后面跟宏替换.这个并不是常用的格式化输出用法,但也可以理解为就是格式 ...

  8. python语言格式化输出_Python | 格式化输出字符串

    一直以来,字符串的格式化输出对于编程来说,尤其是新手,还是挺麻烦的.对于这部分的内容,笔者的建议是,只要大致能满足输出要求,越简单越好,别整那复杂的~(图文无关[俏皮]) 工具/原料 Python 2 ...

  9. C语言格式化输出总结:%d,%c,%s,%f, %lf,%m.nd,%m.nf,%m.ns 以及sprintf函数

    凡事发生必将有益于我,高手,从来都不仅仅是具备某种思维的人,而是那些具备良好学习习惯的人,成为高手,无他,手熟尔! -----来自一位IT领域的大神 在最近的学习之中,对于格式化输出这个知识点,这里学 ...

最新文章

  1. mysql手注_php+mysql手注拿shell教程【朋友给的】
  2. Hibernate知识问答
  3. 2021-2025年中国云计算数据中心IT资产处置(ITAD)行业市场供需与战略研究报告
  4. 【5分钟 Paper】Playing Atari with Deep Reinforcement Learning
  5. SI5341驱动(verilog)
  6. ADB如何无线连接手机操作方法
  7. linux添加软件源命令,Linux 添加源
  8. markdown下载破解地址 和 常用语法
  9. WORD-如何解除WORD文档的锁定
  10. [LOJ#6198]谢特[后缀数组+trie+并查集]
  11. 多线程结果合并计算CyclicBarrier的使用
  12. date_sub函数用法-----随笔记
  13. 从学校家长委员会谈开去
  14. windows系统修复
  15. linux之pmap命令查看进程的地址空间和占用的内存
  16. 读《Google软件测试之道》笔记---SWE,SET,TE职责
  17. wpf TextBox日志文本框
  18. MySQL 是如何归档数据的呢?
  19. 老版本微信平台服务器部署步骤(没那么坑版)
  20. 推荐几个常用在线图工具(支持时序图、用例图、类图、活动图、组件图、状态图、对象图、部署图等。同时还支持非 UML 图的甘特图、架构图等)

热门文章

  1. 新的PX8防水等级和IPX8防水等级的区别、IP68和PX8的区别,TUV莱茵防蓝光认证是什么
  2. 安卓期末大作业——养猫论坛(源码+任务书)
  3. 【AI Studio平台基本操作】进入课程
  4. 一个提高照片质量的网站和一个改变照片DPI的方法
  5. vivoY73s和vivoY70s的区别 vivoY73s和vivoY70s哪个值得入手
  6. 操作系统文件系统题库
  7. php高级研发工程师是什么意思,高级PHP研发工程师岗位职责
  8. linux centos 7.6修改ssh默认端口号
  9. C#:Windows窗体应用程序 计算器(一)
  10. solidity 合约入金出金(eth)