Golang 格式化输出完全指南:fmt.Printf 格式化动词用法详解,看这一篇就够了!

81 阅读3分钟

文章目录 **

在 Go 语言中,fmt包用于实现格式化的输入输出,其功能类似于 C 语言中的printfscanf。格式化动词(format verbs)提供了多种方式来控制数据的输出格式。本文将详细讲解 Go 语言中常用的格式化动词及其用法。

go fmt.Printf

Go 语言的格式化动词大致分为以下几类:

一般动词

  • %v:以默认格式打印值。对于结构体,%+v 会打印字段名。
  • %#v:以 Go 语法表示值。
  • %T:以 Go 语法表示值的类型。
  • %%:打印一个百分号字符。

示例代码:

package main

import "fmt"

type Person struct {
	Name string
	Age  int
}

func main() {
	p := Person{"Alice", 30}

	fmt.Printf("%%v 默认格式:%v\n", p)
	fmt.Printf("%%+v 包含字段名:%+v\n", p)
	fmt.Printf("%%#v Go 语法表示:%#v\n", p)
	fmt.Printf("%%T 类型表示:%T\n", p)
	fmt.Printf("%%%% 百分号:%%\n")
}

输出:

%v 默认格式:{Alice 30}
%+v 包含字段名:{Name:Alice Age:30}
%#v Go 语法表示:main.Person{Name:"Alice", Age:30}
%T 类型表示:main.Person
%% 百分号:%

布尔类型

  • %t:打印布尔值 true 或 false

示例代码:

package main

import "fmt"

func main() {
	fmt.Printf("%%t 布尔值:%t\n", true)
}

输出:

%t 布尔值:true

在当前版本的 Go 中,%v 和 %t 对布尔值的输出是相同的,但使用 %t 可以明确地表明你正在格式化布尔值。这样,代码的可读性更高,并且格式化意图更加明确。如果将来有新的格式化需求或规则,使用 %t 可能更容易维护和理解。

整数类型

  • %b:二进制表示。
  • %c:对应的 Unicode 字符。
  • %d:十进制表示。
  • %o:八进制表示。
  • %O:带 0o 前缀的八进制表示。
  • %q:单引号字符字面量,使用 Go 语法进行安全转义。
  • %x:十六进制表示,字母 a-f 使用小写。
  • %X:十六进制表示,字母 A-F 使用大写。
  • %U:Unicode 格式,类似于 U+1234

示例代码:

package main

import "fmt"

func main() {
	num := 255
	fmt.Printf("%%b 二进制:%b\n", num)
	fmt.Printf("%%c 字符:%c\n", num)
	fmt.Printf("%%d 十进制:%d\n", num)
	fmt.Printf("%%o 八进制:%o\n", num)
	fmt.Printf("%%O 带前缀的八进制:%O\n", num)
	fmt.Printf("%%q 单引号字符:%q\n", num)
	fmt.Printf("%%x 小写十六进制:%x\n", num)
	fmt.Printf("%%X 大写十六进制:%X\n", num)
	fmt.Printf("%%U Unicode 格式:%U\n", num)
}

输出:

%b 二进制:11111111
%c 字符:ÿ
%d 十进制:255
%o 八进制:377
%O 带前缀的八进制:0o377
%q 单引号字符:'ÿ'
%x 小写十六进制:ff
%X 大写十六进制:FF
%U Unicode 格式:U+00FF

浮点数和复数

阅读全文:blog.axiaoxin.com/post/golang…