pointers - %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
意思呢?
解决方案
%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)
推荐阅读
- ruby-on-rails - 带有 docker 的 Rails,在生产中 config.hosts 似乎被忽略了
- jenkins - jenkins Gitlab 集成期间 Webhook 测试失败
- python - 有没有办法在 python 中进行三向绘图?绘制 3 个相互依赖的参数
- excel - 数据透视表:不同的计数
- reactjs - 在浏览器中显示我的反应应用程序时出错
- javascript - 如何在单击来自电子邮件中继(获取并提交)链接中的代码的链接时导航到特定屏幕?
- java - 当变量被赋予某个值时,Java从函数返回
- python - 如何正确使用 python 多处理?
- javascript - 递归查找和更新对象数组中的对象
- python - TensorFlow 多 GPU 手动分发问题