Go 编程 | 连载 06 - 格式化输入输出

一、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,它们分别表示右对齐和左对齐。

猜你喜欢

转载自juejin.im/post/7127309067445501966