在Go语言的源码当中,很多函数都有很清晰的注释,告诉我们使用方法和注意事项,我们应该养成经常阅读源码的习惯,清楚了底层的实现原理,日常开发中碰见的很多问题自然就会迎刃而解了。
关于fmt.Printf()函数提供了很多像C语言一样的占位符,由于关于占位符的描述信息太多了,Go语言开发者们并没有将描述信息直接放在fmt.Printf()函数的实现旁边,而是单独写了一个注释文件,用于解释占位符信息,具体的位置在srcfmtdoc.go当中:
我们展开这个文件内容,可以看到关于%v、%+v和%#v的描述信息:
%vthevalueinadefaultformat
whenprintingstructs,theplusflag(%+v)addsfieldnames
%#vaGo-syntaxrepresentationofthevalue
翻译过来就是:
%v:会以默认形式打印值,当打印结构体的时候,"+"会打印字段名称。
%#v:值的Go语法表示法
代码测试可能直接看解释有点模糊,我们直接写一段代码进行测试便清楚了:
packagemainimport"fmt"typestudentstruct{namestringidint}funcmain(){s:=student{"jiafu",}fmt.Printf("%%v的方式=%v\n",s)fmt.Printf("%%+v的方式=%+v\n",s)fmt.Printf("%%#v的方式=%#v\n",s)}
输出结果如下:
%v的方式={jiafu}%+v的方式={name:jiafuid:}%#v的方式=main.student{name:"jiafu",id:}
总结
%v只输出所有的值
%+v先输出字段类型,再输出该字段的值
%#v先输出结构体名字值,再输出结构体(字段类型+字段的值)
预览时标签不可点收录于话题#个上一篇下一篇