Go小知识:%v %+v %#v的区别

共 1302字,需浏览 3分钟

 ·

2021-06-03 00:16

查看注释

在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}

总结

  1. %v   只输出所有的值

  2. %+v 先输出字段类型,再输出该字段的值

  3. %#v 先输出结构体名字值,再输出结构体(字段类型+字段的值)



推荐阅读


福利

我为大家整理了一份从入门到进阶的Go学习资料礼包,包含学习建议:入门看什么,进阶看什么。关注公众号 「polarisxu」,回复 ebook 获取;还可以回复「进群」,和数万 Gopher 交流学习。

浏览 35
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报