1、内置函数print() vs 标准输出流fmt.Print()
- 建议用fmt.Print格式输出;
官方不建议
用print,后期不保证是否会继续保留。 - print和println输出到标准错误流中并打印,可以在debug时候用。
- fmt.Print是对print的封装,"fmt.Print"默认是"%v"格式的print。
print
默认打印的是slice[0]
的地址;fmt.Println默认打印的slice是数值,fmt.Printf打印地址
需要用%p
。
func main() {
a := []int{1, 3, 4}
println(a) // a[0]地址
fmt.Println(a) // a值
fmt.Println(&a) // &a值
fmt.Printf("切片a的地址:%p\n", &a) // a地址
fmt.Printf("切片a[0]的地址:%p\n", &(a[0])) // a[0]地址
}
输出:
[3/3]0xc0000ae0c0
[1 3 4]
&[1 3 4]
切片a的地址:0xc000098060
切片a[0]的地址:0xc0000ae0c0
2、格式化字符
很好的教程:https://www.jianshu.com/p/66aaf908045e
占位符 | 类型 | 说明 | 举例 | 输出 |
---|---|---|---|---|
%v | 1)普通占位符 | 相应值的默认格式。 | Printf("%v", people) | |
%T | 1)普通占位符 | 相应值的类型的Go语法表示 | Printf("%T", people) | main.Human |
%t | 2)布尔占位符 | true 或 false | Printf("%t", true) | true |
%b | 3)整数占位符 | 二进制表示 | Printf("%b", 5) | 101 |
%d | 3)整数占位符 | 十进制表示 | Printf("%d", 0x12) | 18 |
%o | 3)整数占位符 | 八进制表示 | Printf("%d", 10) | 12 |
%x | 3)整数占位符 | 十六进制表示,字母形式为小写 a-f | Printf("%x", 13) | d |
%X | 3)整数占位符 | 十六进制表示,字母形式为大写 A-F | Printf("%x", 13) | D |
%c | 3)整数占位符 | 相应Unicode码点所表示的字符 | Printf("%c", 0x4E2D) | 中 |
%q | 3)整数占位符 | 单引号围绕的字符字面值,由Go语法安全地转义 | Printf("%q", 0x4E2D) | '中' |
%U | 3)整数占位符 | Unicode格式:U+1234,等同于 "U+%04X" | Printf("%U", 0x4E2D) | U+4E2D |
%b | 4)浮点数和复数的组成部分(实部和虚部) | 无小数部分的,指数为二的幂的科学计数法, 与 strconv.FormatFloat 的 'b' 转换格式一致。例如 -123456p-78 | ||
%x | 5)字符串与字节切片 | 十六进制,小写字母,每字节两个字符 | Printf("%x", "golang") | 676f6c616e67 |
%X | 5)字符串与字节切片 | 十六进制,大写字母,每字节两个字符 | Printf("%X", "golang") | 676F6C616E67 |
%q | 5)字符串与字节切片 | 双引号围绕的字符串,由Go语法安全地转义 | Printf("%q", "Go语言") | "Go语言" |
%p | 6)指针 | 十六进制表示,前缀 0x | Printf("%p", &people) | 0x4f57f0 |
3、不同类型输出
可以先看:go数据类型
(1)go输出数值类型
fmt.Printf("a = %d", a) //同C的格式化输出语法。
fmt.Println("s1" + "s2") // 字符串用+连接,无空格
fmt.Println(a,b) // 空格隔开
var s = fmt.Sprintf() // fmt.Sprintf 来格式化字符串, 语法:fmt.Sprintf(格式化样式, 参数列表…),返回值是string
// 注意:fmt.Printf(123)会报错,因为Printf直接只能输出string,不能输出其他类型。若格式化,则按照格式化样式匹配后面的参数表输出。
(2)go输出slice
fmt.Println打印的slice是数值,fmt.Printf打印地址
需要用%p
。
内置函数print
默认打印的是slice[0]
的地址,不建议用。
func main() {
a := []int{1, 3, 4}
fmt.Println(a) // a值
fmt.Println(&a) // &a值
fmt.Printf("切片a的地址:%p\n", &a) // a地址
fmt.Printf("切片a[0]的地址:%p\n", &(a[0])) // a[0]地址
}
输出:
[1 3 4]
&[1 3 4]
切片a的地址:0xc000098060
切片a[0]的地址:0xc0000ae0c0
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。