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

零、格式化常用场景

  • 数值转字符串:使用 %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"
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值