【Go语言基础【6】】字符串格式化说明

news2025/6/10 3:53:24

文章目录

    • 零、格式化常用场景
    • 一、Go 字符串格式化核心概念
    • 二、常用格式化占位符
      • 1. 整数类型
      • 2. 浮点数类型
      • 3. 字符串与布尔类型
      • 4. 指针与通用类型
    • 三、宽度与精度控制
      • 1. 宽度控制
      • 2. 精度控制(浮点数/字符串)

零、格式化常用场景

  • 数值转字符串:使用 %d%f 等,结合宽度和精度控制输出格式。
  • 日志输出:用 %v%+v 快速打印结构体或复杂类型。
  • 国际化字符处理:通过 %c%U 处理 Unicode 字符,注意编码格式(UTF-8/UTF-16)。

 
常见错误说明

  1. 类型不匹配go fmt.Printf("%d", "abc") // 报错:%!d(string=abc)
  2. 参数数量错误go fmt.Printf("%d", 1, 2) // 报错:%!(EXTRA int=2)
  3. 宽度/精度非整数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
%cUnicode 字符(码点转字符)fmt.Printf("%c", 20013)
%UUnicode 格式(带 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/falsefmt.Printf("%t", true)true

4. 指针与通用类型

占位符说明示例(a := 10; ptr := &a输出
%p指针地址(十六进制,带 0xfmt.Printf("%p", ptr)0xc00001a0b8
%v默认格式fmt.Printf("%v", []int{1,2,3}[1 2 3]
%+v带字段名的结构体格式fmt.Printf("%+v", user){Name:laowang Age:33}
%#vGo 语法表示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"
    

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2406173.html

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

相关文章

RabbitMQ work模型

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

基于微信小程序的作业管理系统源码数据库文档

作业管理系统 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和微信小程序来完成对系统的…

CSS(2)

文章目录 Emmet语法快速生成HTML结构语法 Snipaste快速生成CSS样式语法快速格式化代码 快捷键(VScode)CSS 的复合选择器什么是复合选择器交集选择器后代选择器(重要)子选择器(重要)并集选择器(重要)**链接伪类选择器**focus伪类选…

【RabbitMQ】- Channel和Delivery Tag机制

在 RabbitMQ 的消费者代码中,Channel 和 tag 参数的存在是为了实现消息确认机制(Acknowledgment)和精细化的消息控制。 Channel 参数 作用 Channel 是 AMQP 协议的核心操作接口,通过它可以直接与 RabbitMQ 交互: 手…

NLP学习路线图(三十四): 命名实体识别(NER)

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

【HTML】HTML 与 CSS 基础教程

作为 Java 工程师,掌握 HTML 和 CSS 也是需要的,它能让你高效与前端团队协作、调试页面元素,甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML,网页骨架搭建 核心概念:HTML通过标签定义内…

Windows开机自动启动中间件

WinSW(Windows Service Wrapper 是一个开源的 Windows 服务包装器,它可以帮助你将应用程序打包成系统服务,并实现开机自启动的功能。 一、下载 WinSW 下载 WinSW-x64.exe v2.12.0 (⬇️ 更多版本下载) 和 sample-minimal.xml 二、配置 WinS…

【图片转AR场景】Tripo + Blender + Kivicube 实现图片转 AR 建模

总览 1.将 2D 图片转为立体建模 2. 3. 一、将 2D 图片转为立体建模 1.工具介绍 Tripo 网站 2.找图片 找的图片必须是看起来能够让 AI 有能力识别和推理的,因为现在的AI虽然可以补全但是能力还没有像人的想象力那么丰富。 比如上面这张图片,看起来虽…

LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)

LSTM-XGBoost多变量时序预测(Matlab完整源码和数据) 目录 LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 普通的多变量时序已经用腻了,审稿人也看烦了&#…

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用法…

鸿蒙APP测试实战:从HDC命令到专项测试

普通APP的测试与鸿蒙APP的测试有一些共同的特征,但是也有一些区别,其中共同特征是,它们都可以通过cmd的命令提示符工具来进行app的性能测试。 其中区别主要是,对于稳定性测试的命令的区别,性能指标获取方式的命令的区…

HarmonyOS-ArkUI 自定义弹窗

自定义弹窗 自定义弹窗是界面开发中最为常用的一种弹窗写法。在自定义弹窗中, 布局样式完全由您决定,非常灵活。通常会被封装成工具类,以使得APP中所有弹窗具备相同的设计风格。 自定义弹窗具备的能力有 打开弹窗自定义布局,以…

[electron]预脚本不显示内联script

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

开疆智能Ethernet/IP转Modbus网关连接斯巴拓压力传感器配置案例

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

【Redis】Redis 的持久化策略

目录 一、RDB 定期备份 1.2 触发方式 1.2.1 手动触发 1.2.2.1 自动触发 RDB 持久化机制的场景 1.2.2.2 检查是否触发 1.2.2.3 线上运维配置 1.3 检索工具 1.4 RDB 备份实现原理 1.5 禁用 RDB 快照 1.6 RDB 优缺点分析 二、AOF 实时备份 2.1 配置文件解析 2.2 开启…

20250607在荣品的PRO-RK3566开发板的Android13系统下实现长按开机之后出现插入适配器不会自动启动的问题的解决

20250607在荣品的PRO-RK3566开发板的Android13系统下实现长按开机之后出现插入适配器不会自动启动的问题的解决 2025/6/7 17:20 缘起: 1、根据RK809的DATASHEET,短按开机【100ms/500ms】/长按关机,长按关机。6s/8s/10s 我在网上找到的DATASHE…

浏览器工作原理01 [#]Chrome架构:仅仅打开了1个页面,为什么有4个进程

引用 浏览器工作原理与实践 Chrome打开一个页面需要启动多少进程?你可以点击Chrome浏览器右上角的“选项”菜单,选择“更多工具”子菜单,点击“任务管理器”,这将打开Chrome的任务管理器的窗口,如下图 和Windows任务管…

智能问数Text2SQL Vanna windows场景验证

架构 Vanna 是一个开源 Python RAG(检索增强生成)框架,用于 SQL 生成和相关功能。 机制 Vanna 的工作过程分为两个简单步骤 - 在您的数据上训练 RAG“模型”,然后提出问题,这些问题将返回 SQL 查询,这些查…

【VLAs篇】02:Impromptu VLA—用于驱动视觉-语言-动作模型的开放权重和开放数据

项目描述论文标题Impromptu VLA:用于驱动视觉-语言-动作模型的开放权重和开放数据 (Impromptu VLA: Open Weights and Open Data for Driving Vision-Language-Action Models)研究问题自动驾驶的视觉-语言-动作 (VLA) 模型在非结构化角落案例场景中表现不佳&#xf…