Go语言学习(5) - 打印格式化

2,691 阅读4分钟

打印格式化中我们常常 需要用到的格式化的标记,每个标记实际来源于我们的单词,本文介绍Go语言中的打印格式化。

通用

  • %v:值的默认格式,对应英文为:value
  • %T:值的类型,对应英文为:Type

布尔值

%t:单词 true或者 false,对应英文:true

整型

  • %b:表示为二进制,对应英文:binary
  • %c:该值对应的inicode码值,对应英文:char
  • %d:表示为十进制,对应英文:digital
  • %8d:表示该整型长度为8,不足8位,则在数值前补空格,超过8,则以实际为准
  • %08d:数字长度为8,不足8位,则在数值前补0,超过8,则以实际为准
  • %o:表示为八进制,对应英文:octal
  • %q:该值对应的单引号 括起来的的Go语法字符字面值,必要时 会采用安全的转义表示
  • %x:表示为 十六进制,使用 a-f,对应英文:hex
  • %X:表示为 十六进制,使用 A-F,对应英文:hex
  • %U 表示为 unicode格式:U+1234,等价于“U+%04X”

浮点与复数

  • %f (=%.6f) 有6位小数部分,如果想保留两位小数,则 %.2f 即可(使用的是四舍五入)
  • %e (=%.6e) 有6位小数部分的科学计数法,如果想保留两位小数的科学计数,则 %.2e 即可

字符串和byte[]

  • %s 直接输出字符串 或者 byte[]
  • %q 该值的对应的双引号括起来的Go语法字符串字面值,必要时采用安全的转义表示

说了这么多文字,不如来点实际的,上代码:

package main
import "fmt"

type Student struct {
	x , y int
}

func main() {
	// 通用
	a := 12
	fmt.Printf("%T , a = %v \n", a, a)
	// 相当于实例化
	p := Student{1,2}
	fmt.Printf("%T , a = %v \n", p, p)

	var s rune = '一'
	fmt.Printf("%T , a = %v \n", s, s)

	// 布尔
	b := true
	fmt.Printf("%T , b = %t \n", b, b)

	// 整数
	c := 123
	// %b 表示为 二进制
	fmt.Printf("%T , c = %b \n", c, c)
	// %d 表示为 十进制
	fmt.Printf("%T , c = %d \n", c, c)
	// %8d 表示该整型长度为8,不足8则在数值前补空格,如果超出8,以实际为准
	fmt.Printf("%T , c = %8d \n", c, c)
	// %08d 数字长度为8,不足8在前面补零,超出8,以实际为准
	fmt.Printf("%T , c = %08d \n", c, c)
	// %o 表示为 八进制
	fmt.Printf("%T , c = %o \n", c, c)
	// %x 表示为 十六进制,使用 a-f
	fmt.Printf("%T , c = %x \n", c, c)
	// %x 表示为 十六进制,使用 A-F
	fmt.Printf("%T , c = %X \n", c, c)
	// %U 表示为 unicode格式:U+1234,等价于“U+%04X”
	fmt.Printf("%T , c = %U \n", c, c)
	cc := '一'
	fmt.Printf("%T , cc = %U \n", cc, cc)


	d := 97
	// %c 对应的是 unicode码值
	fmt.Printf("%T , d = %c \n", d, d)
	// %q 该值对应的单引号 括起来的的Go语法字符字面值,必要时 会采用安全的转义表示
	fmt.Printf("%T , d = %q \n", d, d)


	// 浮点数
	e := 123.23456
	// %f (=%.6f) 有6位小数部分,如果想保留两位小数,则 %.2f 即可(使用的是四舍五入)
	fmt.Printf("%T , e = %f \n", e, e)
	fmt.Printf("%T , e = %.2f \n", e, e)
	// %e (=%.6e) 有6位小数部分的科学计数法,如果想保留两位小数的科学计数,则 %.2e 即可
	fmt.Printf("%T , e = %e \n", e, e)
	fmt.Printf("%T , e = %.2e \n", e, e)
	// %E 科学计数法
	fmt.Printf("%T , %E \n", e, e)

	// 字符串和byte[]
	f := "测试"
	// %s 直接输出字符串 或者 byte[]
	fmt.Printf("%T , f = %s \n", f, f)
	// %q 该值的对应的双引号括起来的Go语法字符串字面值,必要时采用安全的转义表示
	fmt.Printf("%T , f = %q \n", f, f)

	arr := [3]byte{97, 98, 99}
	fmt.Printf("%T , arr = %s \n", arr, arr)

	arr2 := [3]byte{'a', 'b', 'c'}
	fmt.Printf("%T , arr2 = %s \n", arr2, arr2)
	fmt.Printf("%T , arr2 = %x \n", arr2, arr2)
	fmt.Printf("%T , arr2 = %X \n", arr2, arr2)

	// 变量赋值
	g := fmt.Sprintf(f)
	fmt.Println("g==" + g)
}

运行结果如下:

int , a = 12 
main.Student , a = {1 2} 
int32 , a = 19968 
bool , b = true 
int , c = 1111011 
int , c = 123 
int , c =      123 
int , c = 00000123 
int , c = 173 
int , c = 7b 
int , c = 7B 
int , c = U+007B 
int32 , cc = U+4E00 
int , d = a 
int , d = 'a' 
float64 , e = 123.234560 
float64 , e = 123.23 
float64 , e = 1.232346e+02 
float64 , e = 1.23e+02 
float64 , 1.232346E+02 
string , f = 测试 
string , f = "测试" 
[3]uint8 , arr = abc 
[3]uint8 , arr2 = abc 
[3]uint8 , arr2 = 616263 
[3]uint8 , arr2 = 616263 
g==测试

欢迎关注我的公众号~ 搜索公众号: 翻身码农把歌唱 或者 扫描下方二维码:

img