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.mzph.cn/web/53781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++模拟实现list:list、list类的初始化和尾插、list的迭代器的基本实现、list的完整实现、测试、整个list类等的介绍

文章目录 前言一、list二、list类的初始化和尾插三、list的迭代器的基本实现四、list的完整实现五、测试六、整个list类总结 前言 C模拟实现list:list、list类的初始化和尾插、list的迭代器的基本实现、list的完整实现、测试、整个list类等的介绍 一、list list本…

影响6个时序Baselines模型的代码Bug

前言 我是从去年年底开始入门时间序列研究,但直到最近我读FITS这篇文章的代码时,才发现从去年12月25号就有人发现了数个时间序列Baseline的代码Bug。如果你已经知道这个Bug了,那可以忽略本文~ 这个错误最初在Informer&#xff0…

web入门

什么是spring 特点:配置繁琐,入门难度大,提出了springboot 1.springbootweb入门例子 2.http协议 2.1概述 2.2请求协议 由三部分组成:请求行、请求头、请求体 2.3响应协议 2.4协议解析

云桌面+数字人:开启直播新纪元

随着科技的飞速发展,直播行业也在不断变革。云桌面和数字人直播作为新兴力量,正逐渐崭露头角,受到了广泛关注。 云桌面技术的出现,为直播带来了全新的可能性。它不再依赖传统的本地硬件设备,而是通过云计算提供弹性可…

我与Linux的爱恋:命令行参数|环境变量

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:Linux的学习 文章目录 一.命令行参数二.环境变量1.环境变量的基本概念2.查看环境变量的方法3.环境变量相关命令4.环境变量的组织方式以及获取环境变量的三种方法 环境变量具有全局属性 一…

C++map与set

文章目录 前言一、map和set基础知识二、set与map使用示例1.set去重操作2.map字典统计 总结 前言 本章主要介绍map和set的基本知识与用法。 一、map和set基础知识 map与set属于STL的一部分,他们底层都是是同红黑树来实现的。 ①set常见用途是去重 ,set不…

数据技术进化史:从数据仓库到数据中台再到数据飞轮的旅程

随着大数据时代的到来,数据已经成为企业的核心资产之一。在过去几十年间,数据技术也随之不断演进,从早期的数据仓库到近年来热门的数据中台,再到正在快速发展的数据飞轮概念,每一步都是技术革新的体现。 一、数据仓库&…

电商跨境电商商城系统/网上商城接口/电商数据接口详情

电商API接口背景:电商运营中,数据分析这项工作越来越重要,许多品牌方也越来越热衷去做电商数据分析。不过,全面的数据该如何获取呢,此时,电商数据接口的重要性便凸显出来了。 电商API数据接口主要有以下特…

外包干了两年,收获真不少...

有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂…

深度伪造语音检测(Deepfake Speech Detection, DSD)全面概述

近期,深度学习技术和神经网络在生成型人工智能领域已取得重大突破。如今,关键的通信媒介,如音频、图像、视频和文本,均能实现自动生成,并广泛应用于诸多领域,包括聊天机器人系统(如ChatGPT&…

Kettle9连接mysql8.0.36失败处理

一、问题描述 kettle作为数据转换同步的工具,使用java开发,连接数据库使用jar的驱动包,比如oracle连接使用ojdbc8.jar,mysql连接使用mysql-connect-java-8.0.*,但是截止目前mysql8.0.33到8.0.36在官网是没有mysql驱动包的&#x…

IPD如何解决产品开发的典型问题

IPD(Integrated Product Development,集成产品开发)是一种领先的、成熟的产品开发的管理思想和管理模式。它是根据大量成功的产品开发管理实践总结出来的,并被大量实践证明的高效的产品开发模式。从汉捷咨询二十多年来为五百多家企…

18724 二叉树的遍历运算

### 思路 1. **递归构建树**: - 先序遍历的第一个节点是根节点。 - 在中序遍历中找到根节点的位置,左边部分是左子树,右边部分是右子树。 - 递归构建左子树和右子树。 2. **递归生成后序遍历**: - 递归生成左子树的…

飞睿智能实时雷达活体探测传感器模块,智能家居静止检测实时感知人员有无

随着科技的飞速发展,我们的生活正在经历着未有的创新。在这个创新的浪潮中,实时雷达活体探测传感器模块的技术正逐渐崭露头角,以其独特的优势为我们的生活带来安全与便捷。今天,我们就来详细探讨一下这项技术,看看它是…

【DP解密多重背包问题】:优化策略与实现

文章目录 什么是多重背包问题?多重背包问题的数学模型 例题多重背包问题Ⅰ多重背包问题Ⅱ 总结 什么是多重背包问题? 多重背包问题是一个经典的组合优化问题。与标准背包问题不同,在多重背包问题中,每种物品可以选择多个&#xf…

蓝桥杯15届C/C++B组省赛题目

问题描述 小蓝组织了一场算法交流会议,总共有 5050 人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。但有 77 个人,这 77 人彼此之间没有进行握手 (但这 77 人与…

langchain v0.3更新了什么?

版本改动 这是具体改动的链接 官方blog首先说明了: 所有软件包已在内部从 Pydantic 1 升级到 Pydantic 2。 所有软件包都完全支持在用户代码中使用 Pydantic 2,而无需使用 langchain_core.pydantic_v1 或 pydantic.v1 等桥接程序。 由于 Pydantic 1 已…

【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))

Host 表示服务器主机的地址和端口号 URL 里面不是已经有 Host 了吗,为什么还要写一次? 这里的 Host 和 URL 中的 IP 地址、端口什么的,绝大部分情况下是一样的,少数情况下可能不同当前我们经过某个代理进行转发。过程中&#xf…

2024年项目经理不能错过的开源项目管理系统大盘点:全面指南

在2024年,随着项目管理领域的不断发展,开源项目管理系统成为了项目经理们提升工作效率的利器。本文将全面盘点几款备受推荐的开源项目管理系统,帮助项目经理们找到最佳选择,不容错过。 在项目管理日益复杂的今天,开源项…

腾讯云点播及声音上传

文章目录 1、开通腾讯云点播2、获取腾讯云API密钥3、完成声音上传3.1、引入依赖3.2、参考:接入点地域3.3、参考:任务流设置3.4、首先修改配置:3.4.1、 3.5、TrackInfoApiController --》 uploadTrack()3.6、VodServiceImpl --》 uploadTrack(…