首页 > 后端开发 > Golang > 正文

Golang如何格式化字符串_Golang fmt使用技巧与语法说明

P粉602998670
发布: 2025-12-07 13:17:39
原创
287人浏览过
Go语言中格式化字符串依赖fmt包,核心函数为fmt.Sprintf、Printf和Fprintf,使用动词如%s、%d控制输出形式;%v用于默认格式,%+v显示结构体字段名,%#v生成Go语法字面量,%d、%x、%X分别输出十进制和十六进制整数,%s输出字符串,%q带引号并转义,%f、%e、%g控制浮点数精度;修饰符如宽度6、精度.2和标志0、+、-可组合成%6.2f、%-10s、%08d等,提升对齐与可读性;推荐用%+v打印结构体以增强调试信息,或实现String()方法自定义输出;禁止将用户输入作为格式字符串,防止panic或信息泄露,应使用固定格式如"User: %s"配合参数传入,确保安全。

golang如何格式化字符串_golang fmt使用技巧与语法说明

Go 语言中格式化字符串主要靠 fmt 包,核心是 fmt.Sprintffmt.Printffmt.Fprintf 这三个函数,语法简洁统一,但细节决定是否写得清晰又安全。

基础动词(verbs)怎么选

动词控制值的输出形式,写在 % 后面,比如 %s%d。常用且实用的有:

  • %v:默认格式,适合调试,自动适配类型(如结构体打印字段名+值)
  • %+v:结构体时显示字段名,比 %v 更清晰
  • %#v:输出 Go 语法风格的字面量(比如 struct{A int}{A:1}),方便复制回代码
  • %d:十进制整数;%x 十六进制小写;%X 大写
  • %s:字符串;%q 带双引号并转义("hello\n");%x 字符串按字节十六进制输出
  • %f%e%g:浮点数不同表示法,%.2f 可控制小数位数

宽度、精度和标志这些修饰符怎么用

它们紧贴动词前,构成完整格式符,例如 %6.2f%-10s%08d

  • 数字 6 是最小宽度:不足则补空格(左对齐加 -,右对齐默认)
  • .2 是精度:对浮点数是小数位数,对字符串是最大输出长度(%.3s 截取前 3 字符)
  • 0 标志用于数字,表示用 0 填充而非空格(%04d 输出 0042
  • + 强制显示正负号(%+d 输出 +42
  • (空格)标志:正数前加空格,负数前加 -,对齐时有用

结构化格式推荐用结构体字段名 + %+vfmt.Stringer

直接打印结构体别只用 %v,容易漏字段或难读:

Trae国内版
Trae国内版

国内首款AI原生IDE,专为中国开发者打造

Trae国内版 2045
查看详情 Trae国内版

立即学习go语言免费学习笔记(深入)”;

  • %+v 看字段名和值,适合日志或调试:fmt.Printf("%+v", user)
  • 若要自定义输出(比如隐藏密码字段、美化时间),让类型实现 String() string 方法,fmt 会自动调用它
  • 避免手动拼接字符串(如 "name:" + u.Name + ", age:" + strconv.Itoa(u.Age)),既啰嗦又易错

安全提示:别用用户输入当格式字符串

fmt.Printf(userInput, args...) 是严重安全隐患——如果 userInput%s%d,可能触发 panic 或信息泄露:

  • 永远用固定格式字符串:fmt.Printf("User: %s, ID: %d", name, id)
  • 需要动态拼格式?先用 fmt.Sprintf 构造好再传给 fmt.Print*,不把变量放第一个参数位置
  • 日志库(如 logzap)也同理,别把用户数据当格式模板

基本上就这些。fmt 不复杂但容易忽略修饰符细节,用熟几个常用组合(比如 %+v%02d%q)就能覆盖大多数场景。

以上就是Golang如何格式化字符串_Golang fmt使用技巧与语法说明的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号