我最近在学习围棋。这是关于 Go 指针的事情。这是代码:var house = "Malibu Point 10880, 90265"ptr := &housefmt.Printf("ptr type: %T \n", ptr)fmt.Printf("address: %p \n", ptr)value := *ptrfmt.Printf("value type: %T \n", value)fmt.Printf("value: %S\n", value)fmt.Printf("value: %s\n", value)本教程被编码为第 3 行,%s但%S它给出了这个奇怪的结果:ptr type: *stringaddress: 0xc000010200value type: stringvalue: %!S(string=Malibu Point 10880, 90265)value: Malibu Point 10880, 90265应该是这个%s指针的字符串值,但是是什么%S意思呢?
1 回答

狐的传说
TA贡献1804条经验 获得超3个赞
%S不是有效的 fmt 动词。你得到的输出相当于%p. 没什么特别的%S。这似乎发生在任何无法识别的动词上。
fmt.Printf("value: %p\n", value)
fmt.Printf("value: %S\n", value)
fmt.Printf("value: %L\n", value)
fmt.Printf("value: %A\n", value)
value: %!p(string=Malibu Point 10880, 90265)
value: %!S(string=Malibu Point 10880, 90265)
value: %!L(string=Malibu Point 10880, 90265)
value: %!A(string=Malibu Point 10880, 90265)
当您给出错误的 fmt 动词时badVerb,会调用此行为。它记录在docs的“格式错误”中。fmt
格式错误:
如果为动词提供了无效参数,例如向 %d 提供字符串,则生成的字符串将包含问题描述,如以下示例所示:
错误类型或未知动词:%!verb(type=value)
- 1 回答
- 0 关注
- 228 浏览
添加回答
举报
0/150
提交
取消