【发布时间】:2015-11-07 02:44:14
【问题描述】:
考虑一下,
package main
import "fmt"
func main() {
name := "johnny"
fmt.Println("Hello world %s\n", name)
}
打印出来,
你好世界%s 约翰尼
为什么我得到的是 %s 而不是这个,
package main
import "fmt"
func main() {
name := "johnny"
fmt.Printf("Hello world %s\n", name)
}
哪个打印 Hello world johnny?
我试图从documentation 中找出答案,
如果格式(对于 Println 等隐含 %v)对 string (%s %q %v %x %X),以下两条规则适用:
如果操作数实现了错误接口,则会调用 Error 方法将对象转换为字符串,然后将 按照动词的要求进行格式化(如果有的话)。
如果操作数实现方法 String() 字符串,将调用该方法将对象转换为字符串,然后将 按照动词的要求进行格式化(如果有的话)。
但我无法理解这是否会影响我的程序。
【问题讨论】:
-
因为你调用的是 Println,而不是 Printf。
-
Println根本不进行格式化。 -
还请查看您链接的 Println 文档,没有格式字符串参数。
-
@JimB 谢谢。我现在看到了。我想我在 Go 之类的语言上花的时间不够。
-
一般来说,你会发现字符串处理特性/范式更像 C# 或 Java 而不是 PHP 或 Python,大多数东西都为你处理好了,但你仍然必须明确。
标签: go