我最近正在学习Go。这是关于Go指针的事情。
代码如下:
var house = "Malibu Point 10880, 90265"
ptr := &house
fmt.Printf("ptr type: %T \n", ptr)
fmt.Printf("address: %p \n", ptr)
value := *ptr
fmt.Printf("value type: %T \n", value)
fmt.Printf("value: %S\n", value)
fmt.Printf("value: %s\n", value)
本教程使用%s
编码为第3行,但使用%S
则得到了奇怪的结果:
ptr type: *string
address: 0xc000010200
value type: string
value: %!S(string=Malibu Point 10880, 90265)
value: Malibu Point 10880, 90265
%s
应该是此指针的字符串值,但是%S
是什么意思?
答案 0 :(得分:3)
<p style={{ whiteSpace: "pre-wrap" }}>This has lots of whitespace </p>}
不是有效的fmt动词。您得到的输出等效于%S
。 %p
没什么特别的。似乎所有无法识别的动词都会发生这种情况。
%S
此行为来自badVerb
,即called when you give a bad fmt verb。在fmt
docs的“格式错误”中进行了记录。
格式错误:
如果为动词指定了无效的参数(例如为%d提供字符串),则生成的字符串将包含问题的描述,如以下示例所示:
类型错误或动词未知:%!verb(type = value)