【Go语言基础【6】】字符串格式化说明
文章目录
- 零、格式化常用场景
- 一、Go 字符串格式化核心概念
- 二、常用格式化占位符
- 1. 整数类型
- 2. 浮点数类型
- 3. 字符串与布尔类型
- 4. 指针与通用类型
- 三、宽度与精度控制
- 1. 宽度控制
- 2. 精度控制(浮点数/字符串)
零、格式化常用场景
- 数值转字符串:使用
%d
、%f
等,结合宽度和精度控制输出格式。 - 日志输出:用
%v
或%+v
快速打印结构体或复杂类型。 - 国际化字符处理:通过
%c
、%U
处理 Unicode 字符,注意编码格式(UTF-8/UTF-16)。
常见错误说明
- 类型不匹配:
go fmt.Printf("%d", "abc") // 报错:%!d(string=abc)
- 参数数量错误:
go fmt.Printf("%d", 1, 2) // 报错:%!(EXTRA int=2)
- 宽度/精度非整数:
go fmt.Printf("%2.3s", "abc") // 报错:%!(BADPREC)
一、Go 字符串格式化核心概念
Go 语言通过 fmt
包实现字符串格式化,核心函数包括:
fmt.Printf(format string, a ...any)
:按指定格式输出到控制台。fmt.Sprintf(format string, a ...any) string
:返回格式化后的字符串。fmt.Fprintf(w io.Writer, format string, a ...any)
:输出到指定写入器(如文件)。
格式化语法:
以 %
开头的占位符,后跟格式标识符(如 %d
、%s
),可附加宽度、精度等修饰符。
二、常用格式化占位符
1. 整数类型
占位符 | 说明 | 示例(a = 255 ) | 输出 |
---|---|---|---|
%b | 二进制 | fmt.Printf("%b", a) | 11111111 |
%o | 八进制 | fmt.Printf("%o", a) | 377 |
%d | 十进制 | fmt.Printf("%d", a) | 255 |
%x | 十六进制(小写) | fmt.Printf("%x", a) | ff |
%X | 十六进制(大写) | fmt.Printf("%X", a) | FF |
%c | Unicode 字符(码点转字符) | fmt.Printf("%c", 20013) | 中 |
%U | Unicode 格式(带 U+ 前缀) | fmt.Printf("%U", '中') | U+4E2D |
2. 浮点数类型
占位符 | 说明 | 示例(f = 123.456 ) | 输出 |
---|---|---|---|
%e | 科学计数法(小写 e) | fmt.Printf("%e", f) | 1.234560e+02 |
%E | 科学计数法(大写 E) | fmt.Printf("%E", f) | 1.234560E+02 |
%f | 固定小数位(默认 6 位) | fmt.Printf("%f", f) | 123.456000 |
%g | 自动选择紧凑格式 | fmt.Printf("%g", f) | 123.456 |
%G | 类似 %g (大写 E) | fmt.Printf("%G", f) | 123.456 |
3. 字符串与布尔类型
占位符 | 说明 | 示例(str = "Go语言" ) | 输出 |
---|---|---|---|
%s | 原始字符串 | fmt.Printf("%s", str) | Go语言 |
%q | 带双引号的转义字符串 | fmt.Printf("%q", str) | "Go语言" |
%x | 十六进制(小写) | fmt.Printf("%x", str) | 476fe8afad |
%t | 布尔值(true /false ) | fmt.Printf("%t", true) | true |
4. 指针与通用类型
占位符 | 说明 | 示例(a := 10; ptr := &a ) | 输出 |
---|---|---|---|
%p | 指针地址(十六进制,带 0x ) | fmt.Printf("%p", ptr) | 0xc00001a0b8 |
%v | 默认格式 | fmt.Printf("%v", []int{1,2,3} | [1 2 3] |
%+v | 带字段名的结构体格式 | fmt.Printf("%+v", user) | {Name:laowang Age:33} |
%#v | Go 语法表示 | fmt.Printf("%#v", user) | main.User{Name:"laowang", Age:33} |
%T | 类型信息 | fmt.Printf("%T", user) | main.User |
%% | 字面量 % | fmt.Printf("%%") | % |
三、宽度与精度控制
1. 宽度控制
- 基本格式:
%[宽度]s
(宽度为整数,默认右对齐,负数为左对齐)。fmt.Printf("|%5s|", "ab") // 右对齐,宽度5 → "| ab|" fmt.Printf("|%-5s|", "ab") // 左对齐,宽度5 → "|ab |"
- 补零填充:
%[宽度]d
或%0[宽度]d
(宽度不足时补零)。fmt.Printf("%03d", 5) // 补零至3位 → "005"
2. 精度控制(浮点数/字符串)
- 浮点数精度:
%[宽度].[精度]f
(精度指小数位数)。fmt.Printf("%.2f", 123.456) // 保留2位小数 → "123.46"
- 字符串截断:
%.[长度]s
(超出长度则截断)。fmt.Printf("%.3s", "Hello") // 截断至3字符 → "Hel"
相关文章:
【Go语言基础【6】】字符串格式化说明
文章目录 零、格式化常用场景一、Go 字符串格式化核心概念二、常用格式化占位符1. 整数类型2. 浮点数类型3. 字符串与布尔类型4. 指针与通用类型 三、宽度与精度控制1. 宽度控制2. 精度控制(浮点数/字符串) 零、格式化常用场景 数值转字符串:…...
调试快捷键 pycharm vscode
目录 调试快捷键 pycharm vscode 修改快捷键 方法 1:通过菜单打开 方法 2:用快捷键打开 调试快捷键 pycharm Resume Program F9 Step Over F8 两个离的比较近,比较方便,比vscode的好。 vscode Continue F5 改为F9 S…...

RabbitMQ work模型
Work 模型是 RabbitMQ 最基础的消息处理模式,核心思想是 多个消费者竞争消费同一个队列中的消息,适用于任务分发和负载均衡场景。同一个消息只会被一个消费者处理。 当一个消息队列绑定了多个消费者,每个消息消费的个数都是平摊的&a…...

基于微信小程序的作业管理系统源码数据库文档
作业管理系统 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和微信小程序来完成对系统的…...
C++参数传递 a与a的区别
在 C 中,&a(引用)和 a(值传递) 的关键区别在于 参数如何传递给函数,以及由此引发的 性能、语义和安全问题。 最核心的在于你想不想传入的参数被改变,如果想,就用参数传递&#…...

CSS(2)
文章目录 Emmet语法快速生成HTML结构语法 Snipaste快速生成CSS样式语法快速格式化代码 快捷键(VScode)CSS 的复合选择器什么是复合选择器交集选择器后代选择器(重要)子选择器(重要)并集选择器(重要)**链接伪类选择器**focus伪类选…...
Linux--vsFTP配置篇
一、vsFTP 简介 vsftpd(Very Secure FTP Daemon)是 Linux 下常用的 FTP 服务程序,具有安全性高、效率高和稳定性好等特点。支持匿名访问、本地用户登录、虚拟用户等多种认证方式,并可灵活控制权限。 二、安装与启动 1. 检查是否已…...

【RabbitMQ】- Channel和Delivery Tag机制
在 RabbitMQ 的消费者代码中,Channel 和 tag 参数的存在是为了实现消息确认机制(Acknowledgment)和精细化的消息控制。 Channel 参数 作用 Channel 是 AMQP 协议的核心操作接口,通过它可以直接与 RabbitMQ 交互: 手…...
.Net Framework 4/C# 面向对象编程进阶
一、继承 (一)使用继承 子类可以继承父类原有的属性和方法,也可以增加原来父类不具备的属性和方法,或者直接重写父类中的某些方法。 C# 中使用“:”来表示两个类的继承。子类不能访问父类的私有成员,但是可以访问其公有成员,即只要使用 public 声明类成员,就既可以让一…...

NLP学习路线图(三十四): 命名实体识别(NER)
一、命名实体识别(NER)是什么? 命名实体识别(Named Entity Recognition, NER)是自然语言处理中的一项关键序列标注任务。其核心目标是从非结构化的文本中自动识别出特定类别的名词性短语,并将其归类到预定义的类别中。 核心目标:找到文本中提到的命名实体,并分类。 典…...

【HTML】HTML 与 CSS 基础教程
作为 Java 工程师,掌握 HTML 和 CSS 也是需要的,它能让你高效与前端团队协作、调试页面元素,甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML,网页骨架搭建 核心概念:HTML通过标签定义内…...
【NLP】 38. Agent
什么是 Agent? 一个 Agent 就是能够 理解、思考,并且进行世界交互 的模型系统,并不是纯粹的 prompt 返回器。 它可以: 读取外部数据(文件/API)使用记忆进行上下文维持用类Chain-of-Thought (CoT)方式进行…...

Windows开机自动启动中间件
WinSW(Windows Service Wrapper 是一个开源的 Windows 服务包装器,它可以帮助你将应用程序打包成系统服务,并实现开机自启动的功能。 一、下载 WinSW 下载 WinSW-x64.exe v2.12.0 (⬇️ 更多版本下载) 和 sample-minimal.xml 二、配置 WinS…...
AIGC 基础篇 Python基础 02
1.bool类型 书接上回,我们上次最后讲了三大数据类型,除了这三个之外,Python也有bool类型,也就是True和False。 a 2 print(a1) print(a2) 像这里,输出的内容第一个是False,因为a的值为2,而第…...

【图片转AR场景】Tripo + Blender + Kivicube 实现图片转 AR 建模
总览 1.将 2D 图片转为立体建模 2. 3. 一、将 2D 图片转为立体建模 1.工具介绍 Tripo 网站 2.找图片 找的图片必须是看起来能够让 AI 有能力识别和推理的,因为现在的AI虽然可以补全但是能力还没有像人的想象力那么丰富。 比如上面这张图片,看起来虽…...
NLP常用工具包
✨做一次按NLP项目常见工具的使用拆解 1. tokenizer from torchtext.data.utils import get_tokenizertokenizer get_tokenizer(basic_english) text_sample "Were going on an adventure! The weather is really nice today." tokens tokenizer(text_sample) p…...

LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)
LSTM-XGBoost多变量时序预测(Matlab完整源码和数据) 目录 LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 普通的多变量时序已经用腻了,审稿人也看烦了&#…...
Git 切换到旧提交,同时保证当前修改不丢失
在 Git 中,可以通过以下几种方式切换到之前的提交,同时保留当前的修改 1. 使用 git checkout 创建临时分离头指针(推荐用于查看代码) git checkout <commit-hash>这会让你进入"分离头指针"状态,你可…...

C#学习12——预处理
一、预处理指令: 解释:是在编译前由预处理器执行的命令,用于控制编译过程。这些命令以 # 开头,每行只能有一个预处理指令,且不能包含在方法或类中。 个人理解:就是游戏里面的备战阶段(不同对局…...

Razor编程中@Helper的用法大全
文章目录 第一章:Helper基础概念1.1 Helper的定义与作用1.2 Helper的基本语法结构1.3 Helper与HtmlHelper的区别 第二章:基础Helper用法2.1 无参数Helper2.2 带简单参数的Helper2.3 带默认值的参数2.4 使用模型作为参数 第三章:高级Helper用法…...
React 样式方案与状态方案初探
React 本身只提供了基础 UI 层开发范式,其他特性的支持需要借助相关社区方案实现。本文将介绍 React 应用体系中样式方案与状态方案的主流选择,帮助开发者根据项目需求做出合适的选择。 1. React 样式方案 1.1. 内联样式 (Inline Styles) 通过 style …...

鸿蒙APP测试实战:从HDC命令到专项测试
普通APP的测试与鸿蒙APP的测试有一些共同的特征,但是也有一些区别,其中共同特征是,它们都可以通过cmd的命令提示符工具来进行app的性能测试。 其中区别主要是,对于稳定性测试的命令的区别,性能指标获取方式的命令的区…...
git删除本地分支和远程分支
删除本地分支 git branch -d 分支名删除远程分支 git push origin --delete 分支名...
MySQL用户远程访问权限设置
mysql相关指令 一. MySQL给用户添加远程访问权限1. 创建或者修改用户权限方法一:创建用户并授予远程访问权限方法二:修改现有用户的访问限制方法三:授予特定数据库的特定权限 2. 修改 MySQL 配置文件3. 安全最佳实践4. 测试远程连接5. 撤销权…...
在Android13上添加系统服务的好用例子
在Android13上添加一个自动的system service例子 留好,备用。 --- .../prebuilts/api/30.0/plat_pub_versioned.cil | 76 - .../prebuilts/api/31.0/plat_pub_versioned.cil | 94 - .../prebuilts/api/32.0/plat_pub_versioned.cil | 94 - frameworks/base/co…...

HarmonyOS-ArkUI 自定义弹窗
自定义弹窗 自定义弹窗是界面开发中最为常用的一种弹窗写法。在自定义弹窗中, 布局样式完全由您决定,非常灵活。通常会被封装成工具类,以使得APP中所有弹窗具备相同的设计风格。 自定义弹窗具备的能力有 打开弹窗自定义布局,以…...
JVM——对象模型:JVM对象的内部机制和存在方式是怎样的?
引入 在Java的编程宇宙中,“Everything is object”是最核心的哲学纲领。当我们写下new Book()这样简单的代码时,JVM正在幕后构建一个复杂而精妙的“数据实体”——对象。这个看似普通的对象,实则是JVM内存管理、类型系统和多态机制的基石。…...
Java求职者面试:微服务技术与源码原理深度解析
Java求职者面试:微服务技术与源码原理深度解析 第一轮:基础概念问题 1. 请解释什么是微服务架构,并说明其优势和挑战。 微服务架构是一种将单体应用拆分为多个小型、独立的服务的软件开发方法。每个服务都运行在自己的进程中,并…...

[electron]预脚本不显示内联script
script-src self 是 Content Security Policy (CSP) 中的一个指令,它的作用是限制加载和执行 JavaScript 脚本的来源。 具体来说: self 表示 当前源。也就是说,只有来自当前网站或者当前页面所在域名的 JavaScript 脚本才被允许执行。"…...

开疆智能Ethernet/IP转Modbus网关连接斯巴拓压力传感器配置案例
本案例是将ModbusRTU协议的压力传感器数据上传到欧姆龙PLC,由于PLC采用的是Ethernet/IP通讯协议,两者无法直接进行数据采集。故使用开疆智能研发的Ethernet转Modbus网关进行数据转换。 配置过程 首先我们开始配置Ethernet/IP主站(如罗克韦尔…...