Go语言教程-占位符及演示代码

Go语言中的格式化输出主要使用fmt包,其中包含多种占位符用于不同类型的数据格式化。以下是常用的占位符及其演示代码:

通用占位符

占位符 说明
%v 值的默认格式表示
%+v 类似%v,但输出结构体时会添加字段名
%#v 值的Go语法表示
%T 值的类型的Go语法表示
%% 百分号

布尔型占位符

占位符 说明
%t true或false

整数型占位符

占位符 说明
%b 二进制表示
%c 对应的Unicode码点所表示的字符
%d 十进制表示
%o 八进制表示
%x 十六进制表示,使用a-f小写
%X 十六进制表示,使用A-F大写
%U Unicode格式:U+1234,等价于"U+%04X"

浮点数与复数占位符

占位符 说明
%b 无小数部分、二进制指数的科学计数法
%e 科学计数法,如-1234.456e+78
%E 科学计数法,如-1234.456E+78
%f 有小数部分但无指数部分
%F 等价于%f
%g 根据情况选择%e或%f
%G 根据情况选择%E或%F

字符串与字节切片占位符

占位符 说明
%s 直接输出字符串或字节切片
%q 双引号括起来的字符串
%x 十六进制,小写字母
%X 十六进制,大写字母

指针占位符

占位符 说明
%p 十六进制表示,前缀0x

宽度与精度控制

可以在占位符中使用宽度和精度控制:

  • %f 默认宽度,默认精度

  • %9f 宽度9,默认精度

  • %.2f 默认宽度,精度2

  • %9.2f 宽度9,精度2

  • %9.f 宽度9,精度0

演示代码

Go 复制代码
package main  

import "fmt"

func main() {
    // 通用占位符演示
    fmt.Printf("通用占位符:\n")
    fmt.Printf("%%v: %v\n", "Hello")
    fmt.Printf("%%+v: %+v\n", struct{ Name string }{Name: "Alice"})
    fmt.Printf("%%#v: %#v\n", "Hello")
    fmt.Printf("%%T: %T\n", "Hello")
    fmt.Printf("%%%%: %%\n")
    
    // 布尔型演示
    fmt.Printf("\n布尔型占位符:\n")
    fmt.Printf("%%t: %t\n", true)
    
    // 整数型演示
    fmt.Printf("\n整数型占位符:\n")
    num := 65
    fmt.Printf("%%b: %b\n", num)  // 二进制
    fmt.Printf("%%c: %c\n", num)  // Unicode字符
    fmt.Printf("%%d: %d\n", num)  // 十进制
    fmt.Printf("%%o: %o\n", num)  // 八进制
    fmt.Printf("%%x: %x\n", num)  // 十六进制小写
    fmt.Printf("%%X: %X\n", num)  // 十六进制大写
    fmt.Printf("%%U: %U\n", num)  // Unicode格式
    
    // 浮点数演示
    fmt.Printf("\n浮点数占位符:\n")
    f := 123.456
    fmt.Printf("%%b: %b\n", f)   // 科学计数法
    fmt.Printf("%%e: %e\n", f)   // 科学计数法小写e
    fmt.Printf("%%E: %E\n", f)   // 科学计数法大写E
    fmt.Printf("%%f: %f\n", f)   // 无指数
    fmt.Printf("%%g: %g\n", f)   // 根据情况选择
    fmt.Printf("%%G: %G\n", f)   // 根据情况选择
    
    // 宽度和精度控制
    fmt.Printf("\n宽度和精度控制:\n")
    fmt.Printf("|%%9.2f|: |%9.2f|\n", f)
    fmt.Printf("|%%.2f|: |%.2f|\n", f)
    fmt.Printf("|%%9.f|: |%9.f|\n", f)
    
    // 字符串演示
    fmt.Printf("\n字符串占位符:\n")
    str := "Hello, 世界"
    fmt.Printf("%%s: %s\n", str)
    fmt.Printf("%%q: %q\n", str)
    fmt.Printf("%%x: %x\n", str)
    fmt.Printf("%%X: %X\n", str)
    
    // 指针演示
    fmt.Printf("\n指针占位符:\n")
    p := &str
    fmt.Printf("%%p: %p\n", p)
}

输出结果:

Go 复制代码
通用占位符:
%v: Hello
%+v: {Name:Alice}
%#v: "Hello"
%T: string
%%: %

布尔型占位符:
%t: true

整数型占位符:
%b: 1000001
%c: A
%d: 65
%o: 101
%x: 41
%X: 41
%U: U+0041

浮点数占位符:
%b: 8687443681197687p-46
%e: 1.234560e+02
%E: 1.234560E+02
%f: 123.456000
%g: 123.456
%G: 123.456

宽度和精度控制:
|%9.2f|: |   123.46|

宽度和精度控制:
|%9.2f|: |   123.46|
宽度和精度控制:
|%9.2f|: |   123.46|
|%9.2f|: |   123.46|
|%.2f|: |123.46|
|%9.f|: |      123|
|%9.f|: |      123|


字符串占位符:
%s: Hello, 世界
%s: Hello, 世界
%q: "Hello, 世界"
%x: 48656c6c6f2c20e4b896e7958c
%q: "Hello, 世界"
%x: 48656c6c6f2c20e4b896e7958c
%x: 48656c6c6f2c20e4b896e7958c
%X: 48656C6C6F2C20E4B896E7958C

指针占位符:
%p: 0xc00009c070
相关推荐
oak隔壁找我8 分钟前
MySQL中 SHOW FULL PROCESSLIST` 输出中 `State` 列的所有可能值
后端
上进小菜猪1 小时前
基于 YOLOv8 的面向文档智能处理的表格区域检测系统 [目标检测完整源码]
后端
oak隔壁找我1 小时前
JVM常用调优参数
java·后端
IT_陈寒5 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
晨星shine5 小时前
GC、Dispose、Unmanaged Resource 和 Managed Resource
后端·c#
蝎子莱莱爱打怪5 小时前
OpenClaw 从零配置指南:接入飞书 + 常用命令 + 原理图解
java·后端·ai编程
倚栏听风雨6 小时前
【ES避坑指南】明明存的是 "CodingAddress",为什么 term 查询死活查不到?彻底搞懂 text 和 keyword
后端
程序员爱钓鱼6 小时前
Go 操作 Windows COM 自动化实战:深入解析 go-ole
后端·go·排序算法
回家路上绕了弯6 小时前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
子玖7 小时前
实现微信扫码注册登录-基于参数二维码
后端·微信·go