首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在不打印的情况下格式化Go字符串?

在不打印的情况下格式化Go字符串?
EN

Stack Overflow用户
提问于 2012-06-21 00:21:35
回答 5查看 277.9K关注 0票数 464

有没有一种简单的方法可以在Go中格式化字符串而不打印字符串?

我可以这样做:

代码语言:javascript
复制
bar := "bar"
fmt.Printf("foo: %s", bar)

但是我希望返回格式化后的字符串,而不是打印出来,这样我就可以进一步操作它。

我也可以这样做:

代码语言:javascript
复制
s := "foo: " + bar

但是,当格式字符串很复杂时,这就变得很难阅读,当一个或多个部分不是字符串并且必须首先进行转换时,则会很麻烦,例如

代码语言:javascript
复制
i := 25
s := "foo: " + strconv.Itoa(i)

有没有更简单的方法来做这件事?

EN

回答 5

Stack Overflow用户

发布于 2021-05-31 11:29:46

尝试使用Sprintf();它不会打印输出,但会保存输出以供将来使用。看看这个。

代码语言:javascript
复制
package main

import "fmt"

func main() {
    
    address := "NYC"

    fmt.Sprintf("I live in %v", address)

}

当您运行此代码时,它将不会输出任何内容。但是,一旦您将Sprintf()分配给一个单独的变量,它就可以用于将来的用途。

代码语言:javascript
复制
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)

}
票数 2
EN

Stack Overflow用户

发布于 2020-04-02 19:53:27

我们可以通过支持Formatdefine new Type自定义一个新的字符串类型。

代码语言:javascript
复制
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}}

票数 1
EN

Stack Overflow用户

发布于 2020-09-14 22:23:58

我来到这个页面是为了寻找一种格式化错误字符串的方法。因此,如果有人在这方面需要帮助,您可以使用fmt.Errorf()函数。

方法签名为func Errorf(format string, a ...interface{}) error。它将格式化后的字符串作为满足error接口的值返回。

您可以在文档- https://golang.org/pkg/fmt/#Errorf中查找更多详细信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11123865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档