在 Go 语言中,fmt.Printf
函数用于格式化输出,其中 %q
是一个非常有用的格式动词,用于在字符串或字节切片周围加上引号。这对于调试和显示字符串内容时特别有用,因为它会显示出字符串的原始形式,包括转义字符。
以下是 %q
的具体用法和特点:
-
字符串 (string):
%q
会给字符串值加上双引号。- 任何非打印字符或特殊字符将被转义。
gopackage main import "fmt" func main() { str := "Hello, 世界" fmt.Printf("%q\n", str) // 输出: "Hello, 世界" }
-
字节切片 ([]byte):
- 对于字节切片,行为类似,但输出会更明确地显示出字节的形式。
gopackage main import "fmt" func main() { byteSlice := []byte{72, 101, 108, 108, 111, 44, 32, 228, 184, 150, 231, 149, 140} fmt.Printf("%q\n", byteSlice) // 输出: "Hello, \xe4\xb8\x96\xe7\x95\x8c" }
-
空值处理:
- 如果传递的是
nil
,%q
会输出""
。
gopackage main import "fmt" func main() { var nilStr *string fmt.Printf("%q\n", nilStr) // 输出: "" }
- 如果传递的是
-
转义字符:
- 特殊字符如
\n
,\t
等会在引号内被转义显示。
gopackage main import "fmt" func main() { specialStr := "Line1\nLine2\tTabbed" fmt.Printf("%q\n", specialStr) // 输出: "Line1\nLine2\tTabbed" }
- 特殊字符如
使用 %q
可以帮助你更清晰地看到字符串在内存中的实际表示,这在处理包含特殊字符的字符串或进行调试时非常有用。