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

考虑,


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?


我试图从文档中找出答案,


如果格式(对于 Println 等隐式为 %v)对字符串有效(%s %q %v %x %X),则以下两条规则适用:


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


如果操作数实现方法 String() string,则将调用该方法将对象转换为字符串,然后将根据动词(如果有)的要求对其进行格式化。


但是我无法理解这是否影响了我的程序。


眼眸繁星
浏览 178回答 2
2回答

慕哥6287543

在f中Printf是“格式化”。这就是%?动词可以做任何事情的原因,因为函数是为解析它们而构建的。Println没有这种格式。格式不像某些语言那样是字符串的属性(也许你和我一样,来自 Python?)

qq_花开花谢_0

Println只打印字符串并向其附加换行符。Printf是“打印格式”的缩写,基于 C 库,这是格式说明符等约定的来源。简单的答案是它的设计。如果你想使用格式说明符,你必须调用 format 方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go