为什么Go中的fmt.Println打印动词%s文字而不是值?

时间:2015-11-06 18:40:05

标签: go

考虑,

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),适用以下两个规则:

     
      
  1. 如果操作数实现了错误接口,则将调用Error方法将对象转换为字符串,然后将该字符串   按动词要求格式化(如果有的话)。

  2.   
  3. 如果操作数实现方法String()字符串,则将调用该方法将对象转换为字符串,然后将该字符串   按动词要求格式化(如果有的话)。

  4.   

但是我很难理解这是否会影响我的程序。

2 个答案:

答案 0 :(得分:3)

f中的Printf用于"格式化。"这就是%?动词做任何事情的原因,因为该函数是为解析它们而构建的。 Println没有这样的格式。

格式化不像某些语言中的字符串属性(也许你和我一样来自Python?)

答案 1 :(得分:1)

Println只打印字符串并为其添加换行符。 Printf是'打印格式的简称'并且基于C库,这是格式说明符的约定来自的地方。

简单的答案是它的设计。如果你想使用格式说明符,你必须调用格式方法。