%s和%S之间的差异

时间:2020-07-05 02:59:23

标签: pointers go

我最近正在学习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是什么意思?

1 个答案:

答案 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)