TOC
CHAT

Go语言字符串占位符简介

Golang的字符串占位符在fmt包的各种打印函数中使用,如 fmt.Printffmt.Sprintf。在c、java的基础上有所改动,故这里作此介绍。

1 变量值与类型

  • %v:打印变量的值,会根据变量的类型选择合适的默认格式进行打印
    • 对于结构体,打印结构体的字段。
    • 对于指针类型,打印指针指向的值。
  • %+v:类似 %v,但会打印结构体的字段名
  • %#v:打印值的Go语言语法表示
  • %T:打印变量的类型
x := 42
y := "hello"
z := 3.14
fmt.Printf("x: %v, type: %T\n", x, x)
fmt.Printf("y: %v, type: %T\n", y, y)
fmt.Printf("z: %v, type: %T\n", z, z)
x: 42, type: int
y: hello, type: string
z: 3.14, type: float64
type Person struct {
    Name string
    Age  int
}

person := Person{
    Name: "Teresa",
    Age:  17,
}

fmt.Printf("值的默认格式表示: %v\n", person)
fmt.Printf("值带结构体的字段名表示: %+v\n", person)
fmt.Printf("值的Go语言语法表示: %#v\n", person)
值的默认格式表示: {Teresa 17}
值带结构体的字段名表示: {Name:Teresa Age:17}
值的Go语言语法表示: main.Person{Name:"Teresa", Age:17}

2 整数

  • %d:十进制表示
  • %b:二进制表示
  • %o:八进制表示
  • %x / %X:十六进制表示(字母小写/大写;下同)
n := 42
fmt.Printf("十进制: %d\n", n)
fmt.Printf("二进制: %b\n", n)
fmt.Printf("八进制: %o\n", n)
fmt.Printf("十六进制(小写): %x\n", n)
fmt.Printf("十六进制(大写): %X\n", n)
十进制: 42
二进制: 101010
八进制: 52
十六进制(小写): 2a
十六进制(大写): 2A

3 浮点数

  • %f:有小数点的十进制表示
  • %e / %E:科学计数法
  • %g / %G:根据情况选择%f%e
f := 3.1415926
fmt.Printf("浮点数: %f\n", f)
fmt.Printf("科学计数法(小写): %e\n", f)
fmt.Printf("科学计数法(大写): %E\n", f)
浮点数: 3.141593
科学计数法(小写): 3.141593e+00
科学计数法(大写): 3.141593E+00

4 字符、字符串和字节切片

  • %%: 百分号字符(%
  • %c:字符
  • %U:字符的Unicode码点
  • %s:直接输出字符串或字节切片
  • %q:使用双引号括起来的字符串
  • %x / %X:每个字节用两字符的十六进制表示
fmt.Printf("百分号: 37%%\n")

var char1 rune = 'A'
var char2 rune = '中'
var char3 rune = '😊'

fmt.Printf("char1: %c Unicode: %U\n", char1, char1)
fmt.Printf("char2: %c Unicode: %U\n", char2, char2)
fmt.Printf("char3: %c Unicode: %U\n", char3, char3)
百分号: 37%
char1: A Unicode: U+0041
char2: 中 Unicode: U+4E2D
char3: 😊 Unicode: U+1F60A
s := "hello"
fmt.Printf("字符串: %s\n", s)
fmt.Printf("带引号的字符串: %q\n", s)
fmt.Printf("每个字节用十六进制表示(小写): %x\n", s)
fmt.Printf("每个字节用十六进制表示(大写): %X\n", s)
字符串: hello
带引号的字符串: "hello"
每个字节用十六进制表示(小写): 68656c6c6f
每个字节用十六进制表示(大写): 68656C6C6F

5 指针

  • %p:指针地址
t := 100
p := &t
fmt.Printf("指针地址: %p\n", p)
指针地址: 0xc00001a128

6 布尔值

  • %t:布尔值(truefalse
b := true
fmt.Printf("布尔值:%t\n", b)
布尔值:true

发表评论