考虑,
package main
import "fmt"
func main() {
name := "johnny"
fmt.Println("Hello world %s\n", name)
}
打印出来,
Hello world %s 约翰尼
为什么我得到%s而不是这个,
package main
import "fmt"
func main() {
name := "johnny"
fmt.Printf("Hello world %s\n", name)
}
打印Hello world johnny?
我试图找出documentation,
的答案如果格式(对于Println等隐式为%v)对a有效 字符串(%s%q%v%x%X),适用以下两个规则:
如果操作数实现了错误接口,则将调用Error方法将对象转换为字符串,然后将该字符串 按动词要求格式化(如果有的话)。
- 醇>
如果操作数实现方法String()字符串,则将调用该方法将对象转换为字符串,然后将该字符串 按动词要求格式化(如果有的话)。
但是我很难理解这是否会影响我的程序。
答案 0 :(得分:3)
f
中的Printf
用于"格式化。"这就是%?
动词做任何事情的原因,因为该函数是为解析它们而构建的。 Println
没有这样的格式。
格式化不像某些语言中的字符串属性(也许你和我一样来自Python?)
答案 1 :(得分:1)
Println
只打印字符串并为其添加换行符。 Printf
是'打印格式的简称'并且基于C库,这是格式说明符的约定来自的地方。
简单的答案是它的设计。如果你想使用格式说明符,你必须调用格式方法。