Сделайте так, чтобы fmt.sprintf не заменял% s в переменных - PullRequest
0 голосов
/ 03 июля 2019

Если я хочу сделать следующее:

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

Я хочу напечатать

 %shello%sWorld

т.е.% s заменяется только в% sWorld.

Какмогу ли я сделать это?

Я не хочу заменять на %%shello%%s

1 Ответ

6 голосов
/ 03 июля 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...