问题描述
当参数为 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()
。