当前位置: 首页 > article >正文

golang格式化输入输出

fmt包使用类似于C的printf和scanf的函数实现格式化I/O

1输出格式化

一般的:

动词效果解释
%v[1 -23 3]、[1 -23 3]、&{sdlkjf 23}以默认格式显示的值,与bool(%t)、int, int8 etc(%d)、uint, uint8 etc(%d)、float32, complex64, etc(%g)、string(%s)、chan(%p)、pointer(%p )等效
%+v[1 -23 3]、[1 -23 3]、&{Name:sdlkjf Age:23}打印结构时添加字段名称
%#v[3]int{1, -23, 3}、[]int{1, -23, 3}、&main.Student{Name:“sdlkjf”, Age:23}值的 Go 语法表示(浮点无穷大和 NaN 打印为 ±Inf 和 NaN)
%T[3]int、[]int、*main.Student%T 值类型的 Go 语法表示
%%%%!(EXTRA int=1)、%%!(EXTRA [3]int=[1 -23 3])、%%!(EXTRA []int=[1 -23 3])、%%!(EXTRA *main.Student=&{sdlkjf 23})文字百分号;不消耗任何值

布尔:

动词效果解释
%ttrue、false单词 true 或 false

整形:

动词效果解释
%d5 6 7 8 -9 10 11 12 13 14十进制
%+d+5 +6 +7 +8 -9 +10 +11 +12 +13 +14显示正负号的十进制
%4d- 5 6 7 8 -9 10 11 12 13 14-宽度为4,右对齐
%-4d-5 6 7 8 -9 10 11 12 13 14 -宽度为4,左对齐
%b101 110 111 1000 -1001 1010 1011 1100 1101 1110二进制
%o5 6 7 10 -11 12 13 14 15 16八进制
%O0o5 0o6 0o7 0o10 -0o11 0o12 0o13 0o14 0o15 0o16前缀为 0o的八进制
%x5 6 7 8 -9 a b c d e十六进制,af 为小写字母
%X5 6 7 8 -9 A B C D E十六进制,AF 为大写字母
%UU+0005 U+0006 U+0007 U+0008 U+FFFFFFFFFFFFFFF7 U+000A U+000B U+000C U+000D U+000EUnicode 格式:U+1234;与“U+%04X”相同
%q‘\x05’ ‘\x06’ ‘\a’ ‘\b’ ‘�’ ‘\n’ ‘\v’ ‘\f’ ‘\r’ ‘\x0e’使用 Go 语法安全转义的单引号字符文字
%c(输出为空,都是特殊字符)相应 Unicode 代码点所表示的字符

浮点和复数:

动词效果解释
%f2.230000 5.780000有小数点但没有指数,例如 123.456
%.4f2.2300 5.7800有小数点但没有指数,精度为4
%9f- 2.230000 5.780000-有小数点但没有指数,宽度为9,右对齐
%9f- 2.230000 5.780000-有小数点但没有指数,宽度为9,右对齐
%9.f- 2 6-有小数点但没有指数,宽度为9,右对齐,精度为0
%9.4f- 2.2300 5.7800-有小数点但没有指数,宽度为9,右对齐,精度为4
%F2.230000 5.780000%F 与 %f 同义
%b9353298p-22 6507701461550367p-50无小数的科学计数法,指数为 2 的幂,与 strconv.FormatFloat 类似,但格式为 ‘b’,例如 -123456p-78
%e2.230000e+00 5.780000e+00科学计数法,例如 -1.234456e+78
%E2.230000E+00 5.780000E+00科学计数法,例如 -1.234456E+78
%g2.23 5.78表示大指数,否则为 %f
%e2.230000e+00 5.780000e+00表示大指数,否则为 %f
%G2.23 5.78表示大指数,否则为 %F
%E2.230000E+00 5.780000E+00表示大指数,否则为 %F
%x0x1.1d70a4p+01 0x1.71eb851eb851fp+02十六进制计数法(指数为 2 的十进制幂),例如 -0x1.23abcp+20
%X0X1.1D70A4P+01 0X1.71EB851EB851FP+02大写十六进制计数法,例如 -0X1.23ABCP+20

字符串和字节切片:

动词效果解释
%ssdlkfjasdfja HelloWord字符串或切片的未解释字节
%q“sdlkfjasdfja” “HelloWord”使用 Go 语法安全转义的双引号字符串
%x73646c6b666a617364666a61 48656c6c6f576f7264以 16 为基数,小写,每个字节两个字符
%X73646C6B666A617364666A61 48656C6C6F576F7264%X 以 16 为基数,大写,每个字节两个字符
%p0xc000092020 0xc000092030以 16 进制表示的第 0 个元素的地址,以 0x 开头

指针:

动词效果解释
%p0xc000092020 0xc000092030以 16 为基数,以 0x 为前导
%b1100000000000000000010010010000000100000 1100000000000000000010010010000000110000二进制
%d824634318880 824634318896十进制
%o14000002220040 14000002220060八进制
%xc000092020 c000092030十六进制小字母
%XC000092020 C000092030十六进制大字母

其他标识:

动词解释
‘+’总是为数值打印符号;保证 %q 仅输出 ASCII 格式(%+q)
‘-’在右侧而不是左侧填充空格(左对齐该字段)
‘#’为二进制添加前导 0b(%#b)、为八进制添加 0(%#o)、为十六进制添加 0x 或 0X(%#x 或 %#X);为 %p 隐藏 0x(%#p);对于 %q,如果 strconv.CanBackquote返回 true,则打印原始(反引号)字符串;总是为 %e、%E、%f、%F、%g 和 %G 打印小数点;不要删除 %g 和 %G 的尾随零;如果字符对 %U(%#U)可打印,则写入例如 U+0078 ‘x’’ (空格)为数字中的省略符号留一个空格(% d);在打印字符串或十六进制切片的字节之间放置空格(%x,%X);没有备用十进制格式,因此 %#d 和 %d 的行为相同
‘0’用前导零而不是空格填充;对于数字,这会将填充移动到符号后

2显示参数索引

在Printf、Sprintf和Fprintf中,每个格式化动词的默认行为是格式化在调用中传递的连续参数。但是,动词前面的符号 [n] 表示将格式化第 n 个 1 索引的参数。宽度或精度的 ‘*’ 之前的相同符号选择保存该值的参数索引。在处理括号表达式 [n] 之后,后续动词将使用参数 n+1、n+2 等,除非另有指示。

fmt.Sprintf("%[2]d %[1]d\n", 11, 22)
//22 11

//下面这两个等效
fmt.Printf("%[3]*.[2]*[1]f\n", 12.0, 2, 6)
fmt.Printf("%6.2f\n", 12.0)
//12.00
//12.00

3格式错误

所有错误都以字符串“%!”开头,有时后面跟着一个字符(动词),并以括号内的描述结尾。

//类型错误或动词未知:%!verb(type=value)
fmt.Printf("%d", "hi")
fmt.Println()
//%!d(string=hi)

//参数太多:%!(EXTRA type=value)
fmt.Printf("hi", "guys")
fmt.Println()
//hi%!(EXTRA string=guys)

//参数太少:%!verb(MISSING)
fmt.Printf("hi%d\n")
fmt.Println()
//hi%!d(MISSING)

//宽度或精度非整数:%!(BADWIDTH) 或 %!(BADWIDTH)
fmt.Printf("%*s", 4.5, "hi")
fmt.Println()
//%!(BADWIDTH)hi
fmt.Printf("%.*s", 4.5, "hi")
fmt.Println()
//%!(BADPREC)hi

//参数索引无效或使用不正确:%!(BADINDEX)
fmt.Printf("%*[2]d", 7)
fmt.Println()
//%!d(BADINDEX)
fmt.Printf("%.[2]d", 7)
fmt.Println()
//%!d(BADINDEX)

4输入输出

函数名参数返回值解释
Fprintw io.Writer, a …anyn int, err errorFprintf 根据格式说明符格式化并写入 w。它返回写入的字节数和遇到的任何写入错误。
Fprintfw io.Writer, format string, a …anyn int, err errorFprintf 根据格式说明符格式化并写入 w。它返回写入的字节数和遇到的任何写入错误。
Fprintlnw io.Writer, a …anyn int, err errorFprintln 使用其操作数的默认格式进行格式化并写入 w。操作数之间始终添加空格并附加换行符。它返回写入的字节数和遇到的任何写入错误。
Fscanr io.Reader, a …anyn int, err errorFscan 扫描从 r 读取的文本,将连续的空格分隔值存储到连续的参数中。换行符算作空格。它返回成功扫描的项目数。如果该数量小于参数数量,err 将报告原因。
Fscanfr io.Reader, a …anyn int, err errorn int , err error
Fscanlnr io . Reader , a … anyn int , err errorFscanln 与Fscan类似,但在换行符处停止扫描,并且在最后一项之后必须有一个换行符或 EOF。返回值n是变量数
Fscanlnr io . Reader , a … anyn int , err errorFscanln 与Fscan类似,但在换行符处停止扫描,并且在最后一项之后必须有一个换行符或 EOF。返回值n是变量数
Printa … anyn int,err error使用默认格式打印其操作数的格式并写入标准输出。当操作数都不是字符串时,会在操作数之间添加空格。它返回写入的字节数和遇到的任何写入错误。
Printlna … anyn int,err errorPrintln 使用其操作数的默认格式进行格式化并写入标准输出。操作数之间始终添加空格并附加换行符。它返回写入的字节数和遇到的任何写入错误。
Scana … anyn int,err errorScan 扫描从标准输入读取的文本,将连续的空格分隔值存储到连续的参数中。换行符算作空格。它返回成功扫描的项目数。如果该数量小于参数数量,err 将报告原因。
Scanfformat string, a …anyn int, err errorScanf 扫描从标准输入读取的文本,将连续的空格分隔值存储到由格式确定的连续参数中。它返回成功扫描的项目数。如果该数量小于参数数量,err 将报告原因。输入中的换行符必须与格式中的换行符匹配。一个例外:动词 %c 始终扫描输入中的下一个符文,即使它是空格(或制表符等)或换行符。
Scanlna …anyn int, err errorScanln 与Scan类似,但在换行符处停止扫描,并且在最后一项之后必须有一个换行符或 EOF。
Sprinta …anystringSprintf 根据格式说明符进行格式化并返回结果字符串。
Sprintfformat string, a …anystringSprintf 根据格式说明符进行格式化并返回结果字符串。
Sprintlna …anystringSprintln 使用其操作数的默认格式进行格式化并返回结果字符串。操作数之间始终添加空格并附加换行符。
Sscanstr string , a … anyn int , err errorSscan 扫描参数字符串,将连续的空格分隔值存储到连续的参数中。换行符算作空格。它返回成功扫描的项目数。如果该数量小于参数数量,err 将报告原因。
Sscanfstr string, format string, a …anyn int , err errorSscanf 扫描参数字符串,将连续的空格分隔值存储到由格式确定的连续参数中。它返回成功解析的项目数。输入中的换行符必须与格式中的换行符匹配。
Sscanfstr string, format string, a …anyn int , err errorSscanf 扫描参数字符串,将连续的空格分隔值存储到由格式确定的连续参数中。它返回成功解析的项目数。输入中的换行符必须与格式中的换行符匹配。
Sscanlnstr string,a … anyn int , err errorSscanln 与Sscan类似,但在换行符处停止扫描,并且在最后一项之后必须有一个换行符或 EOF。
Formatf State , verb runey-该实现控制如何解释State和 rune,并可能调用Sprint或Fprint (f) 等来生成其输出。
GoStringer-string该方法定义该值的 Go 语法。GoString 方法用于打印作为操作数传递给 %#v 格式的
ReadRune-r rune , size int , err errorReadRune 从输入中读取下一个符文(Unicode 代码点)。 如果在 Scanln、Fscanln 或 Sscanln 期间调用,ReadRune() 将在返回第一个 ‘\n’ 或读取超出指定宽度后返回 EOF。
UnreadRune-error导致下一次调用ReadRune返回相同的符文。
SkipSpace--SkipSpace跳过输入中的空格。新线路得到适当处理,用于正在执行的操作;请参阅软件包文档,了解更多信息。
TokenskipSpace bool, f func(rune) booltoken []byte, err error如果skipSpace为真,则Token跳过输入中的空格,然后返回满足f©的Unicode码点c的运行。如果f为零!unicode。使用IsSpace©;也就是说,令牌将包含非空格字符。对新管线进行适当处理,以适应正在进行的操作;有关更多信息,请参阅软件包文档。返回的切片指向共享数据,这些数据可能会被下一次调用Token、使用ScanState作为输入调用Scan函数或调用Scan方法返回时覆盖。
Width-wid int, ok boolWidth返回宽度选项的值以及是否已设置。单位是Unicode码位。
Readbuf []byten int, err error因为ReadRune是由接口实现的,所以扫描例程永远不应该调用Read,有效的ScanState实现可能会选择始终从Read返回错误。
Scanstate ScanState, verb runeerrorScanner 由具有 Scan 方法的任何值实现,该方法扫描输入以查找值的表示形式并将结果存储在接收器中,接收器必须是指针才有用。对于实现它的Scan、Scanf或Scanln的任何参数,都会调用 Scan 方法。
Writeb []byten int, err errorWrite是调用以发出要打印的格式化输出的函数。
Width-wid int, ok boolWidth返回宽度选项的值以及是否已设置。
Precision-prec int, ok boolPrecision返回精度选项的值以及是否已设置。
Flagc intboolFlag报告是否已设置标志c(一个字符)。
String-string

测试代码


http://www.kler.cn/a/317374.html

相关文章:

  • [Linux网络编程]10-http协议,分别使用epoll和libevent两种方式实现B/S服务器
  • 【数据价值化】国有企业数据资产入表及估值实践指南:挖掘数字资产新价值
  • 《Django 5 By Example》阅读笔记:p76-p104
  • Linux系统编程多线程之条件变量和信号量讲解
  • 缓存与数据库不一致的解决方案:深入理解与实践
  • 鸿蒙next版开发:相机开发-适配不同折叠状态的摄像头变更(ArkTS)
  • 【3D打印】使用simplify 3D切片更改Gcode手动断电续打、掉电、未打完继续打印、补救
  • Parallels Desktop 20 for Mac 推出:完美兼容 macOS Sequoia 与 Win11 24H2
  • 【Godot4.3】自定义数列类NumList
  • 【Qt | Qstring】Qstring详细介绍(字符串的添加、删除、修改、查询、截断、删除空白字符等)
  • Gitlab runner的使用示例(二):Maven + Docker 自动化构建与部署
  • 【游戏引擎】C++自制游戏引擎 Lunar Game Engine
  • 基于vue框架的宠物销售管理系统3m9h3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 微软开源GraphRAG的使用教程-使用自定义数据测试GraphRAG
  • Java中的快速排序算法详解
  • c++ pair
  • ubuntu下检查端口是否占用问题,编写shell脚本检查端口是否占用
  • 使用Python实现图形学曲线和曲面的NURBS算法
  • ChartLlama: A Multimodal LLM for Chart Understanding and Generation论文阅读
  • unity Compute Shaders 使程序在GPU中运行
  • LeetCode54. 螺旋矩阵(2024秋季每日一题 21)
  • 计算机毕业设计Hadoop+PySpark深圳共享单车预测系统 PyHive 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习
  • 工博会蓝卓逛展攻略
  • C#测试调用Ghostscript.NET浏览PDF文件
  • <刷题笔记> 二叉搜索树与双向链表注意事项
  • OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(上)