如何解决为什么 fmt.Prinft() 将 `const` 记录在其他包中,例如内存地址?
当参数为 fmt.Printf()
或 %x?
时,var
如何处理 const
。我从书中读到 const
之前没有指定 Type
,很难理解。
const AValue int32 = 1049088
func main() {
fmt.Printf("%#x\n",1049088)
fmt.Printf("%#x\n",AValue)
fmt.Printf("%#x\n",int(time.Friday))
fmt.Printf("%#x\n",time.Friday)
}
日志:
0x100200 // 1049088
0x100200 // AValue
0x5 // int(time.Friday)
0x467269646179 // time.Friday is a type Weekday int
Is `0x467269646179` some kind address of time.Friday?
解决方法
来自docs:
除非使用动词 %T 和 %p 打印,特殊格式
考虑适用于实现某些接口的操作数。
申请顺序:
...
5.如果一个操作数实现了方法String()
字符串,该方法将被调用将对象转换为字符串,然后将
按照动词(如果有)的要求格式化。
对于 string
,动词格式定义为:
%s the uninterpreted bytes of the string or slice
%q a double-quoted string safely escaped with Go syntax
%x base 16,lower-case,two characters per byte
%X base 16,upper-case,two characters per byte
所以 0x467269646179
是 base 16,two characters per byte
输出的 time.Friday.String()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。