示例如下
package main
import (
"fmt"
"time"
)
type User struct {
ID int
Name string
Login time.Time
}
func main() {
var a int = 10
var c int = -10
var b string = "bb"
var st = User{ID: 1, Name: "jack"}
// 通用占位符
// %v 以默认的方式打印变量的值(万能占位符,如果不知道变量是什么类型,用%v即可,go语言会自动为你识别)
// %T 打印变量的类型
// %% 字面上的百分号,并非值的占位符
fmt.Printf("%v\n", a) // 10
fmt.Printf("%T, %T\n", a, st) // int, main.User
fmt.Printf("%d%%\n", a) // 10%
// 整数类型
// %+d 带符号的整型
// %q 打印单引号
// %o 不带零的八进制
// %#o 带零的八进制
// %x 小写的十六进制
// %X 大写的十六进制
// %#x 带0x的十六进制
// %b 打印整型的二进制
// %U 打印Unicode字符
// %#U 打印带字符的Unicode
var d = 'Ω'
var e = '\u03A9'
fmt.Printf("%d, %+d, %o, %#o\n", a, c, a, a)
fmt.Printf("%x, %#x, %b\n", a, a, a)
fmt.Printf("%U, %#U | %U, %#U | %c,%c\n", d, d, e, e, d, e)
// 10, -10, 12, 012
// a, 0xa, 1010
// U+03A9, U+03A9 'Ω' | U+03A9, U+03A9 'Ω' | Ω,Ω
// 整数指定宽度
// %5d 整型长度为5,右对齐,左边留白
// %-5d 左对齐右边留白
// %05d 数字前面补零
a = 200
fmt.Printf("|%d|\n", a)
fmt.Printf("|%8d|\n", a)
fmt.Printf("|%-8d|\n", a)
fmt.Printf("|%08d|\n", a)
// |200|
// | 200|
// |200 |
// |00000200|
// 浮点数
var f = 3.141592653
// %f (=%.6f) 6位小数点
// %.2f 最多2位小数来表示
// %e (=%.6e) 6位小数点(科学计数法)
// %g 用最少的数字来表示
// %.2g 最多2位数字来表示
fmt.Printf("%f, %.2f, %e, %g, %.2g\n", f, f, f, f, f)
// 3.141593, 3.14, 3.141593e+00, 3.141592653, 3.1
// 字符串
// %s 正常输出字符串
// %q 字符串带双引号,字符串中的引号带转义符
// %#q 字符串带反引号,如果字符串内有反引号,就用双引号代替
// %x 将字符串转换为小写的16进制格式
// %X 将字符串转换为大写的16进制格式
// % x 带空格的16进制格式
b = "这是字符串`\""
fmt.Printf("%s\n", b) // 这是字符串`"
fmt.Printf("%q\n", b) // "这是字符串`\""
b = `这是"字符串\"`
fmt.Printf("%s\n", b) // 这是"字符串\"
fmt.Printf("%q\n", b) // "这是\"字符串\\\""
fmt.Printf("%#q\n", b) // `这是"字符串\"`
fmt.Printf("%x\n", b) // e8bf99e698af22e5ad97e7aca6e4b8b25c22
// 指定字符串长度
// %5s 最小宽度为5
// %-5s 最小宽度为5(左对齐)
// %.5s 最大宽度为5
// %5.7s 最小宽度为5,最大宽度为7
// %-5.7s 最小宽度为5,最大宽度为7(左对齐)
// %5.3s 如果宽度大于3,则截断
// %05s 如果宽度小于5,就会在字符串前面补零
b = "jack"
fmt.Printf("|%5s|\n", b) // | jack|
fmt.Printf("|%-5s|\n", b) // |jack |
fmt.Printf("|%.5s|\n", b+b) // |jackj|
fmt.Printf("|%5.7s|\n", b+b) // |jackjac|
fmt.Printf("|%5.3s|\n", b+b) // | jac|
fmt.Printf("|%05s|\n", b) // |0jack|
// 结构体
// %v 以默认的方式打印变量的值
// %+v 在打印结构体时,会添加字段名
// %#v 在打印结构体时,会添加字段名和包名
fmt.Printf("%v\n", st)
fmt.Printf("%+v\n", st)
fmt.Printf("%#v\n", st)
// {1 jack 0001-01-01 00:00:00 +0000 UTC}
// {ID:1 Name:jack Login:0001-01-01 00:00:00 +0000 UTC}
// main.User{ID:1, Name:"jack", Login:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC)}
// bool类型
var b1 = true
// %t 打印true或false
fmt.Printf("%t %t, %v\n", b1, !b1, b1) // true false, true
// 指针
var b2 = &b1
// %p 带0x的指针(指针值带有0x的十六进制前缀)
// %#p 不带0x的指针
fmt.Printf("%v, %p, %#p\n", b2, b2, b2) // 0xc000012168, 0xc000012168, c000012168
}