在Go中是否有一种简单的方法来格式化字符串而不打印字符串?

我可以:

bar := "bar"
fmt.Printf("foo: %s", bar)

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

我还可以这样做:

s := "foo: " + bar

但是,当格式字符串很复杂时,就很难读取,当一个或多个部分不是字符串,必须先转换时,就会很麻烦,比如

i := 25
s := "foo: " + strconv.Itoa(i)

有更简单的方法吗?


当前回答

在本例中,您需要使用Sprintf()来格式化字符串。

func Sprintf(格式字符串,…interface{})字符串

Sprintf根据格式说明符格式化并返回结果字符串。

S:= fmt。Sprintf(“早上好,这里是%s,我从过去%d年就住在这里了”,“John”,20)

你的输出将是:

早上好,我是约翰,我在这里住了20年了。

其他回答

Sprintf就是您要找的。

例子

fmt.Sprintf("foo: %s", bar)

你也可以在“围棋之旅”的错误示例中看到它的使用。

return fmt.Sprintf("at %v, %s", e.When, e.What)

fmt。SprintF函数返回一个字符串,您可以按照fmt的方式格式化字符串。PrintF

尝试使用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)

}

在本例中,您需要使用Sprintf()来格式化字符串。

func Sprintf(格式字符串,…interface{})字符串

Sprintf根据格式说明符格式化并返回结果字符串。

S:= fmt。Sprintf(“早上好,这里是%s,我从过去%d年就住在这里了”,“John”,20)

你的输出将是:

早上好,我是约翰,我在这里住了20年了。

我已经从模板创建了一个用于字符串格式化的go项目(它允许在c#或Python风格中格式化字符串),通过性能测试,它比fmt更先进。Sprintf,你可以在这里找到它https://github.com/Wissance/stringFormatter

它的工作方式如下:


func TestStrFormat(t *testing.T) {
    strFormatResult, err := Format("Hello i am {0}, my age is {1} and i am waiting for {2}, because i am {0}!",
                              "Michael Ushakov (Evillord666)", "34", "\"Great Success\"")
    assert.Nil(t, err)
    assert.Equal(t, "Hello i am Michael Ushakov (Evillord666), my age is 34 and i am waiting for \"Great Success\", because i am Michael Ushakov (Evillord666)!", strFormatResult)

    strFormatResult, err = Format("We are wondering if these values would be replaced : {5}, {4}, {0}", "one", "two", "three")
    assert.Nil(t, err)
    assert.Equal(t, "We are wondering if these values would be replaced : {5}, {4}, one", strFormatResult)

    strFormatResult, err = Format("No args ... : {0}, {1}, {2}")
    assert.Nil(t, err)
    assert.Equal(t, "No args ... : {0}, {1}, {2}", strFormatResult)
}

func TestStrFormatComplex(t *testing.T) {
    strFormatResult, err := FormatComplex("Hello {user} what are you doing here {app} ?", map[string]string{"user":"vpupkin", "app":"mn_console"})
    assert.Nil(t, err)
    assert.Equal(t, "Hello vpupkin what are you doing here mn_console ?", strFormatResult)
}