golang格式化输入输出

news2024/9/24 15:23:05

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.coloradmin.cn/o/2160691.html

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

相关文章

鸿蒙 OS 开发单词打卡 APP 项目实战 20240922 笔记和源码分享

配套有完整的录播课, 需要的私信. 零基础入门级别, 有点前端基础都能学会. 效果截图: 代码截图: 页面完整代码: import { AnswerStatus } from ../enums/AnswerStatus import { PracticeStatus } from ../enums/PracticeStatus import { getRandomQuestions, Question …

江协科技STM32学习- P17 TIM输入捕获

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析

文章目录 C string 类详解:从入门到精通前言第一章:C 语言中的字符串 vs C string 类1.1 C 语言中的字符串1.2 C string 类的优势 第二章:string 类的构造与基础操作2.1 string 类的构造方法2.1.1 示例代码:构造字符串 2.2 string…

Kotlin 多种形式的 when 表达式(七)

导读大纲 1.0.1 在变量中捕捉 when 表达式1.0.2 对任意对象使用 when 表达式1.0.3 使用不带参数的 when 表达式 when 表达式专题系列 从枚举类引出 when 表达式 1.0.1 在变量中捕捉 when 表达式 在前面的示例中,when 表达式的评估值是color变量 它是通过调用 measureColor() …

pip的安装和使用

pip的安装和使用 1、 pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。便于我们对Python的资源包进行管理。 2、注:pip 已内置于 Python 3.4 和 2.7 及以上版本,其他版本需另行安装。 3、在安…

java并发工具包JUC(Java Util Concurrent)

1. 什么是JUC 1.1 JUC简介 JUC(Java Util Concurrent)是Java中的一个并发工具包,提供了一系列用于多线程编程的类和接口,旨在简化并发编程并提高其效率和可维护性。JUC库包含了许多强大的工具和机制,用于线程管理、同…

多比特AI事业部VP程伟光受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 武汉市多比特信息科技有限公司AI事业部VP程伟光先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾,演讲议题为“AI对于项目经理工作的影响和变化解析”。大会将于10月26-27日在北京举办&am…

如何将Vue项目部署至 nginx

一、准备工作 1.确保安装了开发软件 VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js 和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行…

【LeetCode】动态规划—打家劫舍(附完整Python/C++代码)

动态规划—#198. 打家劫舍 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 在这个问题中,你是一个专业的小偷,计划偷窃沿街的房…

JinDouYun性能测试工具使用方法

1.功能介绍 2. 安卓端支持安卓6及以上的版本,ios支持大部分版本 3. 可以测试游戏,视频,普通应用的性能数据,数据精准,低延迟,无侵入 4.工具下载链接 筋斗云 5.后续功能添加,高版本支持&…

网页爬虫法律与道德:探索法律边界与道德规范

目录 引言 一、网络爬虫技术概述 1.1 定义与功能 1.2 技术原理 1.3 案例分析 二、网络爬虫的法律边界 2.1 合法性要求 2.2 刑事风险 2.3 案例分析 三、网络爬虫的道德规范 3.1 尊重版权和隐私 3.2 合理使用爬虫技术 3.3 透明度和社会责任 四、技术挑战与应对策略…

[linux 驱动]块设备驱动详解与实战

目录 1 描述 2 结构体 2.1 block_device_operations 2.2 gendisk 2.3 block_device 2.4 request_queue 2.5 request 2.6 bio 3.7 blk_mq_tag_set 3.8 blk_mq_ops 3 相关函数 3.1 注册注销块设备 3.1.1 register_blkdev 3.1.2 unregister_blkdev 3.2 gendisk 结构…

SpringBoot开发——整合Hutool工具类轻松生成验证码

文章目录 1、Hutool简介2、验证码效果展示2.1 扭曲干扰验证码2.2 线条干扰验证码2.3 圆圈干扰验证码3、验证码应用场景3.1. 用户注册与身份验证3.2. 支付验证3.3. 订单与物流通知3.4. 信息安全与隐私保护3.5. 通知与提醒3.6. 其他应用场景4、Hutool工具类实现验证码生成4.1 引入…

如何使用ssm实现基于VUE的儿童教育网站的设计与实现+vue

TOC ssm676基于VUE的儿童教育网站的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全…

API公共开放平台设计

背景 随着业务发展未来会有更多的三方应用接入公司平台,目前为服务商定制的机制无法满足三方应用快速接入,所以需要一个更加通用的解决方案,开放平台势在必行。 目标 设计一套通用协议,可以支持其他应用快速接入。 说明 本方案旨在设计整体架构,以及对为何这样设计做…

React 理解 re-render 的作用、概念,并提供详细的例子解释

一、什么是 re-render 在 React 中 re-render(重新渲染) 是经常发生的行为,主要确保视图要时刻保持最新的数据来呈现。 但每次发生 re-render 也是有代价的,比如数据状态、focus 焦点、表单数据、都得重置, 遇到代码…

获取商品销量详情API:深入解析返回值,助力电商决策

在电商行业,了解商品的销量详情对于商家制定营销策略、优化库存管理和提升用户体验至关重要。通过调用获取商品销量详情的API接口,商家可以实时获取关键的销售数据,从而做出更加明智的决策。本文将深入解析获取商品销量详情API的返回值&#…

linux信号| 学习信号三步走 | 学习信号需要打通哪些知识脉络?

前言: 本节内容主要讲解linux下信号的预备知识以及信号的概念, 信号部分我们将会分为几个阶段进行讲解:信号的概念, 信号的产生, 信号的保存。本节主要讲解信号 ps:本节内容适合学习了进程相关概念的友友们进行观看哦 目录 什么是…

轻松重置 MySQL 8.0 Root 密码的简便方法!

在Windows环境下安装MySQL数据后,如果忘记了 MySQL 8.0 的 root 密码,不必担心!通过 --skip-grant-tables 和 named-pipe 模式登录后,只需几步简单的 SQL 命令即可重置密码:刷新权限表、修改密码、再刷新权限&#xff…

SpringBoot+Thymeleaf租房管理系统

> 这是一个基于SpringBootThymeleafBootstrap实现的租房管理系统。 > 功能比较完善,包括用户注册/登录、房源登记、账单费用配置、统计报告等功能。 > 模拟真实使用环境,包括了自然人与法人的身份证明录入、房产证信息录入、通过邮件推送月…