有没有一种简单的方法可以在Go中格式化字符串而不打印字符串?
我可以这样做:
bar := "bar"
fmt.Printf("foo: %s", bar)
但是我希望返回格式化后的字符串,而不是打印出来,这样我就可以进一步操作它。
我也可以这样做:
s := "foo: " + bar
但是,当格式字符串很复杂时,这就变得很难阅读,当一个或多个部分不是字符串并且必须首先进行转换时,则会很麻烦,例如
i := 25
s := "foo: " + strconv.Itoa(i)
有没有更简单的方法来做这件事?
发布于 2021-05-31 11:29:46
尝试使用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)
}
发布于 2020-04-02 19:53:27
我们可以通过支持Format
的define new Type
自定义一个新的字符串类型。
package main
import (
"fmt"
"text/template"
"strings"
)
type String string
func (s String) Format(data map[string]interface{}) (out string, err error) {
t := template.Must(template.New("").Parse(string(s)))
builder := &strings.Builder{}
if err = t.Execute(builder, data); err != nil {
return
}
out = builder.String()
return
}
func main() {
const tmpl = `Hi {{.Name}}! {{range $i, $r := .Roles}}{{if $i}}, {{end}}{{.}}{{end}}`
data := map[string]interface{}{
"Name": "Bob",
"Roles": []string{"dbteam", "uiteam", "tester"},
}
s ,_:= String(tmpl).Format(data)
fmt.Println(s)
}
注意:{{.}}
代表{{range $i, $r := .Roles}} {{.}} {{end}}
中的{{$r}}
发布于 2020-09-14 22:23:58
我来到这个页面是为了寻找一种格式化错误字符串的方法。因此,如果有人在这方面需要帮助,您可以使用fmt.Errorf()
函数。
方法签名为func Errorf(format string, a ...interface{}) error
。它将格式化后的字符串作为满足error
接口的值返回。
您可以在文档- https://golang.org/pkg/fmt/#Errorf中查找更多详细信息。
https://stackoverflow.com/questions/11123865
复制相似问题