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数据接口主要有以下特…

MyBatis 中的类型别名配置详解

目录 1. 什么是类型别名? 2. 类型别名的配置方法 2.1 使用单个标签 2.2 使用标签批量扫描 2.3 使用Alias注解 3. 注意事项 4. 相关知识拓展 4.1 MyBatis的映射文件 4.2 MyBatis的动态SQL 4.3 MyBatis与Spring的整合 4.4 性能优化 5. 结论 在现代Java开发…

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

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

深度伪造语音检测(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 人与…

1.分页查询(后端)—— Vue3 + SpringCloud 5 + MyBatisPlus + MySQL 项目系列(基于 Zulu 11)

本手册是基于 Vue3 SpringCloud5 MyBatisPlus MySQL 的项目结构和代码实现,旨在作为一个教学案例进行讲解。为了使案例更具普适性,文档中的公司名称、实体类、表名以及字段名称等敏感信息均已脱敏。 项目结构概述 项目采用标准的分层架构&#xff0…

linux命令之firewall-cmd用法

firewall-cmd Linux上新用的防火墙软件,跟iptables差不多的工具 补充说明 firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第…