在 Go 语言中,fmt
包提供了大量的格式化占位符,用于格式化输出不同类型的数据。选择合适的占位符,可以确保输出的内容格式正确、清晰易懂。
常见的占位符:
基本类型
%v
:按值的默认格式输出。适用于任何类型。%+v
:在%v
的基础上,结构体会额外输出字段名。%#v
:输出 Go 语法表示的值。结构体会输出详细的字段信息和类型。%T
:输出值的类型。%%
:字面百分号(%
本身)。
整数类型
%d
:十进制整数。%b
:二进制格式。%o
:八进制格式。%x
:十六进制格式(小写字母)。%X
:十六进制格式(大写字母)。%c
:相应 Unicode 码点的字符。
浮点数和复数
%f
:标准浮点数表示(小数部分)。%e
:科学计数法表示(小写 e)。%E
:科学计数法表示(大写 E)。%g
:根据具体情况选择%f
或%e
表示。
字符串和字节
%s
:字符串。%q
:带双引号的字符串,安全转义。%x
:以十六进制表示字符串或字节切片。%X
:以大写十六进制表示字符串或字节切片。
布尔类型
%t
:布尔值 (true
或false
)。
指针
%p
:指针的十六进制表示。
如何选择占位符:
选择占位符时,首先需要根据数据类型选择合适的格式化符号,具体情况如下:
-
输出通用数据类型:
-
使用
%v
是通用、默认的选择。如果你不确定类型,%v
可以输出所有类型的值。例如:gologx.Infof("Result: %v", result)
-
-
输出结构体:
-
如果想要查看结构体的详细信息,可以使用
%+v
输出字段名和值,或者使用%#v
输出 Go 语言格式的值。例如:gologx.Infof("Struct data: %+v", myStruct) logx.Infof("Go syntax: %#v", myStruct)
-
-
输出字符串:
-
一般使用
%s
输出字符串;如果需要输出带双引号和转义字符的安全字符串,使用%q
。例如:gologx.Infof("User input: %s", input) logx.Infof("Escaped string: %q", input)
-
-
输出整数:
-
使用
%d
输出十进制整数,如果需要以二进制或十六进制表示,可以分别使用%b
和%x
。例如:gologx.Infof("User age: %d", age) logx.Infof("Memory address in hex: %x", pointer)
-
-
输出浮点数:
-
一般使用
%f
输出浮点数,输出带有小数部分;如果需要科学计数法表示,使用%e
或%E
。例如:gologx.Infof("Price: %f", price) logx.Infof("Price in scientific notation: %e", price)
-
-
输出指针:
-
如果你需要输出一个指针的值,使用
%p
会显示其十六进制地址。例如:gologx.Infof("Pointer address: %p", &myVar)
-
实际案例:
假设我们有如下数据:
go
taskID := 12345
price := 1234.567
name := "Alice"
completed := true
myStruct := struct {
ID int
Name string
}{
ID: 1,
Name: "TestTask",
}
使用占位符输出:
go
logx.Infof("Task ID: %d", taskID) // 输出十进制整数
logx.Infof("Price: %f", price) // 输出浮点数
logx.Infof("User: %s", name) // 输出字符串
logx.Infof("Task completed: %t", completed) // 输出布尔值
logx.Infof("Task info: %+v", myStruct) // 输出结构体,带字段名和值
占位符一览表:
占位符 | 说明 | 示例 |
---|---|---|
%v |
默认格式 | logx.Infof("%v", 42) |
%+v |
结构体字段和值 | logx.Infof("%+v", obj) |
%#v |
Go 语法表示值 | logx.Infof("%#v", obj) |
%T |
输出值的类型 | logx.Infof("%T", obj) |
%d |
十进制整数 | logx.Infof("%d", 123) |
%b |
二进制整数 | logx.Infof("%b", 7) |
%x |
十六进制小写 | logx.Infof("%x", 255) |
%f |
浮点数 | logx.Infof("%f", 3.14) |
%t |
布尔值 | logx.Infof("%t", true) |
%p |
指针地址 | logx.Infof("%p", ptr) |
%s |
字符串 | logx.Infof("%s", "abc") |
%q |
带双引号的字符串 | logx.Infof("%q", "abc") |
通过根据数据类型选择正确的占位符,可以确保输出信息的格式化和可读性。