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
相关推荐
想回家的一天3 分钟前
ECONNREFUSED ::1:8000 前端代理问题
开发语言
cike_y5 分钟前
Mybatis之解析配置优化
java·开发语言·tomcat·mybatis·安全开发
WanderInk33 分钟前
刷新后点赞全变 0?别急着怪 Redis,这八成是 Long 被 JavaScript 偷偷“改号”了(一次线上复盘)
后端
Jay_Franklin1 小时前
SRIM通过python计算dap
开发语言·python
Slow菜鸟2 小时前
Java基础架构设计(三)| 通用响应与异常处理(分布式应用通用方案)
java·开发语言
吴佳浩2 小时前
Python入门指南(七) - YOLO检测API进阶实战
人工智能·后端·python
消失的旧时光-19432 小时前
401 自动刷新 Token 的完整架构设计(Dio 实战版)
开发语言·前端·javascript
wadesir2 小时前
Rust中的条件变量详解(使用Condvar的wait方法实现线程同步)
开发语言·算法·rust
tap.AI2 小时前
RAG系列(二)数据准备与向量索引
开发语言·人工智能
廋到被风吹走2 小时前
【Spring】常用注解分类整理
java·后端·spring