golang fmt.Printf() 小抄

Other flags
其他标记
+ 总是输出 数值 的符号
对于 %q 或 %+q 确保是ASCII-only的输出
- 在右边补充空格(字段左对齐时)
# add leading 0
0 for octal (%#o)
0x for hex (%#x)
0X for hex (%#X)
suppress 0x for %#p
%+q 输出 a raw (backq­uoted) string if strconv.CanBackquote returns true;
空格 %d数字时,为省略的正号留个空格
%x %X 输出字符串或slice 的16进制 时,字节之间保留空格
0 padding时,0打头,而不是空格打头
输出数值时,正负号依然是最前面(即0补充在正负号之后)
General
一般
%v 以 值的 默认格式输出
struct时,%+v 会额外输出field name

fmt.Printf("%v, %v\n", "Hello世界", 99)
Hello世界, 99

var f1 = 123.789
var f2 = 123456789.123456789
fmt.Printf("%v, %v\n", f1, f2)
123.789, 1.2345678912345679e+08              

var stu = Student{
 Id:      10036,
 Name:    "Marvin",
 Address: "中国江苏Nanjing",
}
fmt.Printf("%v\n", stu)
fmt.Printf("%+v\n", stu)

{10036 Marvin 中国江苏Nanjing}               
{Id:10036 Name:Marvin Address:中国江苏Nanjing}

注意:%+v 会额外输出field name

%#v 以Go-syntax的格式 输出 值

var str2 = ` 仰知天文,俯察地理,中晓人和,
 明阴阳,懂八卦,晓奇门,知遁甲, 运筹帷幄之中,决胜千里之外,
 自比管仲乐毅之贤,抱膝危坐,笑傲风月,未出茅庐,先定三分天下。 `
fmt.Printf("%#v\n", str2)
"\t仰知天文,俯察地理,中晓人和,\n\t明阴阳,懂八卦,晓奇门,知遁甲, 运筹帷幄之中,决胜
千里之外,\n\t自比管仲乐毅之贤,抱膝危坐,笑傲风月,未出茅庐,先定三分天下。 "

注意:str2中包含了tab

%T 以Go-syntax的格式 输出 值的类型 fmt.Printf("%T, %T, %T", count, f1, stu)
int, float64, main.Student
%% 输出百分号。不消耗任何入参

fmt.Printf("%d%%的财富掌握在%d%%的人手中", 80, 20)
80%的财富掌握在20%的人手中

注意:%%不消耗任何入参

The default format for %v
针对不同类型,%v等价于
%v 等价于 %t bool:
%v 等价于 %d int, int8, uint, uint8 etc.:(即:整数)
%#v 则等价于 %f
%v 等价于 %g float32, complex64, etc.:
%v 等价于 %s string
%v 等价于 %p chan
%v 等价于 %p pointer
String and slice of bytes
string,或bytes的切片
%s 输出 string或slice的 非解释字节
%q 输出 双引号包裹的,Go-syntax的格式 字符串 同 %#v
%x 输出 16进制,小写,每个byte输出两个character fmt.Printf("%x, %X\n% x, % X", str, str, str, str)
48656c6c6fe4b896e7958c, 48656C6C6FE4B896E7958C
48 65 6c 6c 6f e4 b8 96 e7 95 8c, 48 65 6C 6C 6F E4 B8 96 E7 95 8C
%X 输出 16进制,大写,每个byte输出两个character
Integer
整数
%b 二进制

fmt.Printf("%b, %c, %d\n%o, %q, %U", 198, 198, 198, 198, 198, 198)
11000110, Æ, 198
306, 'Æ', U+00C6

注意:八进制这玩意 根本看不出 是十进制还是八进制

%c unicode code point所代表的character
%d 十进制
%o
(小写字母o)
八进制
%q 输出 单引号包裹的,Go-syntax的格式 character
fmt.Printf("%q,%q,%q,%q", 97, 9, 10, 13)
'a','\t','\n','\r'
注意:整数使用%q,就得到单引号包裹的character
%x 16进制,小写,每个byte输出两个character
%X 16进制,大写,每个byte输出两个character
%U unicode格式,例如 U+1234;等价于 U+%04X
Floating-point and complex constituents
浮点数 和 复数部分
%b 指数为 2的指数,无十进制,科学计数法
以 strconv.FormatFloat 的方式使用 'b' 格式
1024.0得到的是4503599627370496p-42
4503599627370496 * 2^(-42) == 1024.0
%e 科学计数法
 1024.0得到的是  1.024000e+03
-1024.0得到的是 -1.024000e+03
%E 科学计数法
 1024.0得到的是  1.024000E+03
-1024.0得到的是 -1.024000E+03
%f 带小数点,十进制,没有指数
 1024.0得到的是  1024.000000
-1024.0得到的是 -1024.000000
%F 同%f,两者完全一样
%g 大数值时则是%e
小数值时则是%f
%G 大数值时则是%E
小数值时则是%F
Floating-point Precision
浮点数精度
%f 宽度 默认,精度 默认小数点后6位
%9f 宽度 9,精度 默认小数点后6位
%.2f 宽度 默认,精度 2
%9.2f 宽度 9,精度 2
%9.f 宽度 9,精度 0
Pointer
指针
%p 0x打头,16进制表示法
Boolean
%t 输出 true or false
上一篇:for和if的嵌套使用


下一篇:动态规划——打家劫舍(力扣198:打家劫舍)