%s 和 %S 之间的差异

我最近在学习围棋。这是关于 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)

本教程被编码为第 3 行,%s但%S它给出了这个奇怪的结果:


ptr type: *string

address: 0xc000010200

value type: string

value: %!S(string=Malibu Point 10880, 90265)

value: Malibu Point 10880, 90265

应该是这个%s指针的字符串值,但是是什么%S意思呢?


哈士奇WWW
浏览 229回答 1
1回答

狐的传说

%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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go