pointers - %s和%S之间的差异

标签 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是什么意思?

最佳答案

%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)
此行为来自 badVerb ,即called when you give a bad fmt verb。它记录在 fmt docs的“格式错误”中。

格式错误:

如果为动词给出了无效的参数,例如为%d提供了一个字符串,则生成的字符串将包含问题的描述,如以下示例所示:

类型错误或动词未知:%!动词(类型=值)

关于pointers - %s和%S之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62736371/

相关文章:

使用 void 子函数更改 main 中的值

c - 从没有 malloc 的函数返回字符串

python - Golang 相当于 pythons __getattr__() 或 __call__()

json - 你如何使用 go-simplejson 遍历 json 文件

post - 去发送帖子请求吗?

go - 无法根据 Golang 中的条件将接口(interface)转换为结构

c - 为什么我的 free() 包装函数不起作用?

c++ - 在 LabVIEW Call Library Function Node 中,我应该将参数的类型设置为指向 C++ 类的指针?

c++ - 动态内存的打印地址,存储在指针数组中

import - 去导入github,怎么设置?