在Go中是否有一种简单的方法来格式化字符串而不打印字符串?
我可以:
bar := "bar"
fmt.Printf("foo: %s", bar)
但是我希望返回格式化的字符串,而不是打印出来,这样我就可以进一步操作它。
我还可以这样做:
s := "foo: " + bar
但是,当格式字符串很复杂时,就很难读取,当一个或多个部分不是字符串,必须先转换时,就会很麻烦,比如
i := 25
s := "foo: " + strconv.Itoa(i)
有更简单的方法吗?
而不是使用模板。新的,你可以使用新的内置的
模板。模板:
package main
import (
"strings"
"text/template"
)
func format(s string, v interface{}) string {
t, b := new(template.Template), new(strings.Builder)
template.Must(t.Parse(s)).Execute(b, v)
return b.String()
}
func main() {
bar := "bar"
println(format("foo: {{.}}", bar))
i := 25
println(format("foo: {{.}}", i))
}
尝试使用Sprintf();它不会打印输出,而是将其保存以备将来使用。
看看这个。
package main
import "fmt"
func main() {
address := "NYC"
fmt.Sprintf("I live in %v", address)
}
当您运行这段代码时,它不会输出任何东西。但是,一旦将Sprintf()分配给一个单独的变量,它就可以用于将来的目的。
package main
import "fmt"
func main() {
address := "NYC"
fmt.Sprintf("I live in %v", address)
var city = fmt.Sprintf("lives in %v", address)
fmt.Println("Michael",city)
}
而不是使用模板。新的,你可以使用新的内置的
模板。模板:
package main
import (
"strings"
"text/template"
)
func format(s string, v interface{}) string {
t, b := new(template.Template), new(strings.Builder)
template.Must(t.Parse(s)).Execute(b, v)
return b.String()
}
func main() {
bar := "bar"
println(format("foo: {{.}}", bar))
i := 25
println(format("foo: {{.}}", i))
}