在 Go 中,是否有类似 Python 中的“f-string”这样的特性?

hyu*_*lee 10 go

在 Go 中,是否有类似 Python 中的“f-string”的特性?我找不到像 f-string 这样的简单解决方案。

#Python
name = 'AlphaGo'
print(f'I am {name}') ##I am AlphaGo
Run Code Online (Sandbox Code Playgroud)

我在网上和评论中找到的最佳替代解决方案是

//Golang
package main

import (
    "fmt"
)

func main() {
    const name, age = "Kim", 22
    fmt.Println(name, "is", age, "years old.") // Kim is 22 years old.
}

Run Code Online (Sandbox Code Playgroud)

但是,这仍然不像f-string那么简单......

was*_*mup 8

  1. 只需使用:
fmt.Printf("I am %s\n", name) // I am AlphaGo
Run Code Online (Sandbox Code Playgroud)
  1. 出口Name,使用struct
    t := template.Must(template.New("my").Parse("I am {{.Name}}\n"))
    t.Execute(os.Stdout, struct{ Name string }{name}) // I am AlphaGo
Run Code Online (Sandbox Code Playgroud)
  1. 小写name,使用map
    t2 := template.Must(template.New("my").Parse("I am {{.name}}\n"))
    t2.Execute(os.Stdout, map[string]string{"name": name}) // I am AlphaGo
Run Code Online (Sandbox Code Playgroud)
  1. 使用.
    t3 := template.Must(template.New("my").Parse("I am {{.}}\n"))
    t3.Execute(os.Stdout, name) // I am AlphaGo
Run Code Online (Sandbox Code Playgroud)

全部:

package main

import (
    "fmt"
    "os"
    "text/template"
)

func main() {
    name := "AlphaGo"

    fmt.Printf("I am %s\n", name)

    t := template.Must(template.New("my").Parse("I am {{.Name}}\n"))
    t.Execute(os.Stdout, struct{ Name string }{name}) // I am AlphaGo

    t2 := template.Must(template.New("my").Parse("I am {{.name}}\n"))
    t2.Execute(os.Stdout, map[string]string{"name": name}) // I am AlphaGo

    t3 := template.Must(template.New("my").Parse("I am {{.}}\n"))
    t3.Execute(os.Stdout, name) // I am AlphaGo
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是真正的问题。Printf 返回 void 并将字符串输出到控制台。它与 f 字符串有什么关系? (9认同)
  • 这并不能回答问题。正确的答案是“不,Go 中没有等效的 f 字符串”。 (7认同)