douwen8118
douwen8118
2015-11-06 18:40

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

已采纳

Consider,

package main
import "fmt"

func main() {
  name := "johnny"
  fmt.Println("Hello world %s
", name)
}

prints out,

Hello world %s johnny


Why do I get the %s instead of this,

package main
import "fmt"

func main() {
  name := "johnny"
  fmt.Printf("Hello world %s
", name)
}

which prints Hello world johnny?

I have tried to figure out the answer from the documentation,

If the format (which is implicitly %v for Println etc.) is valid for a string (%s %q %v %x %X), the following two rules apply:

  1. If an operand implements the error interface, the Error method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).

  2. If an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).

But I'm having trouble understanding if this is affecting my program.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • doudu161481 doudu161481 6年前

    the f in Printf is for "Formatting." That's why the %? verbs do anything at all, because the function is built to parse for them. Println does no such formatting.

    Formatting isn't a property of strings like in some languages (maybe you, like myself, came from Python?)

    点赞 评论 复制链接分享
  • dongqi6486 dongqi6486 6年前

    Println just prints the string and appends a newline to it. Printf is short for 'print format' and is based off the C library which is where the conventions for format specifiers ect come from.

    Simple answer is it's as designed. If you want to use format specifiers you gotta call the format method.

    点赞 评论 复制链接分享

相关推荐