使fmt.sprintf不替换变量中的%s

时间:2019-07-03 06:30:41

标签: go

如果我想执行以下操作:

    a := "%shello%s"
    b:= fmt.Sprintf("%sWorld",a)
    fmt.Printf(b)

我要打印

 %shello%sWorld

即%s仅在%sWorld中被替换。

我该怎么做?

我不想用%%shello%%s

代替

1 个答案:

答案 0 :(得分:6)

a := "%shello%s"
b:= fmt.Sprintf("%sWorld",a)

这很好用,它导致字符串为"%shello%sWorld"

问题在于您的打印方式:

fmt.Printf(b)

fmt.Printf()b视为格式字符串,并且由于b的值包含%s,因此希望您也传递参数(您没有),因此实际输出包含错误消息。

改为使用fmt.Println()打印它:

fmt.Println(b)

输出将是(在Go Playground上尝试):

%shello%sWorld