本文最后更新于 205 天前 ,文中信息可能已经过时。如有问题请在评论区留言。

fmt

Go 语言标准库中 fmt 包用于格式化 I/O。它提供了一系列函数来格式化输出到控制台或其他输出流,并支持格式化字符串、错误输出、调试信息等。

常用函数

fmt.Println()

作用:打印一行文本并自动换行。

go
1
2
3
4
5
6
7
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

fmt.Printf()

作用:根据格式字符串打印格式化文本。

go
1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
    name := "Alice"
    age := 30
    fmt.Printf("Name: %s, Age: %d\n", name, age)
}

更多格式化 verbs 参考 附录:verbs

fmt.Sprintf()

作用:根据格式字符串返回格式化后的字符串,而不是直接打印出来。

go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package main

import "fmt"

func main() {
    name := "Bob"
    age := 25
    info := fmt.Sprintf("Name: %s, Age: %d", name, age)
    fmt.Println(info)
}

fmt.Errorf()

作用:用于生成错误信息。

go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package main

import (
    "errors"
    "fmt"
)

func main() {
    err := fmt.Errorf("This is an error")
    fmt.Println(err)
}

参考资料

附录:verbs

fmt 实现了格式化的 I/O,其中的函数类似于 C 语言中的 printfscanf。格式化的 verbs 源自 C 语言,但更简单。

General

  • %v :默认格式中的值。(即变量的自然形式,各类型的默认格式可参考 附录:%v 的默认格式) 当打印结构体时,使用加号标志(%+v)会添加字段名。
  • %#v :值的 Go 语法表示形式
  • %T :值的类型的 Go 语法表示形式
  • %% :字面上的百分号

Boolean

  • %t :单词 truefalse

Integer

  • %b :二进制
  • %c :字符(rune)(Unicode 码点)
  • %d :十进制
  • %o :八进制
  • %O :带有 0o 前缀的八进制
  • %q :安全转义的单引号字符文字,采用 Go 语法
  • %x :十六进制,小写字母 a-f
  • %X :十六进制,大写字母 A-F
  • %U :Unicode 格式:U+1234;与 U+%04X 相同

Floating-point and complex constituents

  • %b :指数为二的幂的无小数科学记数法,类似于带有 ‘b’ 格式的 strconv.FormatFloat,例如,-123456p-78
  • %e :科学记数法,例如,-1.234456e+78
  • %E :科学记数法,例如,-1.234456E+78
  • %f :小数点但没有指数,例如,123.456
  • %F%f 的同义词
  • %g :大指数使用 %e,否则使用 %f
  • %G :大指数使用 %E,否则使用 %F
  • %x :十六进制表示法(具有二的幂的十进制指数),例如,-0x1.23abcp+20
  • %X :大写十六进制表示法,例如,-0X1.23ABCP+20

String and slice of bytes(treated equivalently with these verbs)

  • %s :字符串
  • %q :安全转义的双引号字符串,采用 Go 语法
  • %x :十六进制,小写,每个字节两个字符
  • %X :十六进制,大写,每个字节两个字符

Slice

  • %p :以十六进制表示的第 0 个元素的地址,带有 0x 前缀

Pointer

  • %p :以十六进制表示,带有 0x 前缀

对于复合对象,元素将按照以下规则递归地打印:

text
1
2
3
4
struct:             {field0 field1 ...}
array, slice:       [elem0 elem1 ...]
maps:               map[key1:value1 key2:value2 ...]
pointer to above:   &{}, &[], &map[]

附录:%v 的默认格式

类型默认格式
bool%t
intint8%d
uintuint8%d,如果与 %#v 一起打印,则为 %#x
float32complex64%g
string%s
chan%p
pointer%p