一、fmt 标准库
在之前的文章中已经多次用到的 fmt 标准库 下的标准输出函数 Println()
和格式化输出 Printf()
函数,在这篇文章中将介绍 fmt 标注库
中的格式输入和输出。
Package fmt implements formatted I/O with functions analogous to C's printf and scanf. The format 'verbs' are derived from C's but are simpler.
fmt 标准库实现了类似 C 语言 printf 和 scanf 的格式化 I/O,比 C 语言更加简单。
二、格式化输出
通用(缺省)占位符
%v 值的默认格式表示
%+v 类似%v,但输出结构体时会添加字段名
%#v 值的Go语法表示
%T 值的类型的Go语法表示
%% 百分号
格式化输出需要用到 fmt 包下的 Printf()
函数,在之前的文章已经使用过 %v
占位符,该占位符可以表示变量的值。
func main() {
name := "peter"
age := 18
fmt.Printf("I am %v, and %v years old", name, age)
}
执行上述代码,输出结果如下:
I am peter, and 18 years old
如果再添加一个 #
既变为 %#v
时,字符串的输出则会自动加上双引号。
// 其余代码不变
fmt.Printf("I am %#v, and %#v years old", name, age)
执行上述代码,输出结果如下:
I am "peter", and 18 years old
%#v
会按照 Go 语法打印出变量的值,既变量值在 Go 代码中是什么形式,打印出来就是什么形式。
除了 %v
之外还有 %T
,可以输出变量的类型。
// 其余代码不变
fmt.Printf("name 变量的类型:%T, age 变量的类型:%T", name, age)
执行上述代码,输出结果如下:
name 变量的类型:string, age 变量的类型:int
%v
、%#v
、%T
、%+v
、%%
占位符使用时是没有类型限制的,任何类型的变量都可以使用这三个占位符进行表示,也称为缺省。
整型占位符
对于整数类型 int 的来说,有以下几种占位符:
%b 表示为二进制
%c 该值对应的unicode码值
%d 表示为十进制
%o 表示为八进制
%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x 表示为十六进制,使用a-f
%X 表示为十六进制,使用A-F
%U 表示为Unicode格式:U+1234,等价于"U+%04X"
func main() {
name := "peter"
age := 18
fmt.Printf("I am %v, and %d years old\n", name, age)
fmt.Printf("I am %v, and %+d years old\n", name, age)
fmt.Printf("I am %v, and %4d years old\n", name, age)
fmt.Printf("I am %v, and %-4d years old\n", name, age)
fmt.Printf("I am %v, and %b years old\n", name, age)
fmt.Printf("I am %v, and %o years old\n", name, age)
fmt.Printf("I am %v, and %x years old\n", name, 12138)
}
执行上述代码,输出结果如下:
I am peter, and 18 years old
I am peter, and +18 years old
I am peter, and 18 years old
I am peter, and 18 years old
I am peter, and 10010 years old
I am peter, and 22 years old
I am peter, and 2f6a years old
上述代码中使用到了 %4d
和 %-4d
,它们分别表示右对齐和左对齐。