Go小知识:%v %+v %#v的区别
查看注释
在Go语言的源码当中,很多函数都有很清晰的注释,告诉我们使用方法和注意事项,我们应该养成经常阅读源码的习惯,清楚了底层的实现原理,日常开发中碰见的很多问题自然就会迎刃而解了。
关于fmt.Printf()
函数提供了很多像C语言
一样的占位符,由于关于占位符的描述信息太多了,Go语言开发者们并没有将描述信息直接放在fmt.Printf()
函数的实现旁边,而是单独写了一个注释文件,用于解释占位符信息,具体的位置在src > fmt > doc.go
当中:
我们展开这个文件内容,可以看到关于%v
、%+v
和%#v
的描述信息:
%v the value in a default format
when printing structs, the plus flag (%+v) adds field names
%#v a Go-syntax representation of the value
翻译过来就是:
%v:会以默认形式打印值,当打印结构体的时候,"+"会打印字段名称。
%#v:值的Go语法表示法
代码测试
可能直接看解释有点模糊,我们直接写一段代码进行测试便清楚了:
package main
import "fmt"
type student struct {
name string
id int
}
func main() {
s := &student{"jiafu", 123456}
fmt.Printf("%%v的方式 = %v\n", s)
fmt.Printf("%%+v的方式 = %+v\n", s)
fmt.Printf("%%#v的方式 = %#v\n", s)
}
输出结果如下:
%v的方式 = &{jiafu 123456}
%+v的方式 = &{name:jiafu id:123456}
%#v的方式 = &main.student{name:"jiafu", id:123456}
总结
%v 只输出所有的值
%+v 先输出字段类型,再输出该字段的值
%#v 先输出结构体名字值,再输出结构体(字段类型+字段的值)
推荐阅读
评论