Existe uma maneira simples de formatar uma sequência no Go sem imprimir a sequência?
Eu posso fazer:
bar := "bar"
fmt.Printf("foo: %s", bar)
Mas quero que a string formatada seja retornada em vez de impressa para que eu possa manipulá-la ainda mais.
Eu também poderia fazer algo como:
s := "foo: " + bar
Mas isso fica difícil de ler quando a sequência de formatação é complexa e complicada quando uma ou várias partes não são sequências e precisam ser convertidas primeiro, como
i := 25
s := "foo: " + strconv.Itoa(i)
Existe uma maneira mais simples de fazer isso?
string
go
formatting
string-formatting
Carnegie
fonte
fonte
1. Strings simples
Para seqüências de caracteres "simples" (normalmente o que se encaixa em uma linha), a solução mais simples é usar
fmt.Sprintf()
e amigos (fmt.Sprint()
,fmt.Sprintln()
). Elas são análogas às funções sem aS
letra inicial , mas essasSxxx()
variantes retornam o resultado como a emstring
vez de imprimi-las na saída padrão.Por exemplo:
A variável
s
será inicializada com o valor:Dica: Se você deseja concatenar valores de tipos diferentes, talvez não seja necessário usar automaticamente
Sprintf()
(o que requer uma cadeia de formatação) o queSprint()
é exatamente isso. Veja este exemplo:Para concatenar apenas
string
s, você também pode usarstrings.Join()
onde você pode especificar um separador personalizadostring
(a ser colocado entre as seqüências de caracteres a serem unidas).Experimente estes no Go Playground .
2. Strings complexas (documentos)
Se a string que você está tentando criar é mais complexa (por exemplo, uma mensagem de email com várias linhas),
fmt.Sprintf()
torna-se menos legível e menos eficiente (especialmente se você precisar fazer isso várias vezes).Para isso, a biblioteca padrão fornece os pacotes
text/template
ehtml/template
. Esses pacotes implementam modelos orientados a dados para gerar saída de texto.html/template
é para gerar saída HTML segura contra injeção de código. Ele fornece a mesma interface que o pacotetext/template
e deve ser usado em vez detext/template
sempre que a saída for HTML.O uso dos
template
pacotes exige basicamente que você forneça um modelo estático na forma de umstring
valor (que pode ser originário de um arquivo; nesse caso, você fornece apenas o nome do arquivo), que pode conter texto estático e ações que são processadas e executadas quando o arquivo O mecanismo processa o modelo e gera a saída.Você pode fornecer parâmetros que são incluídos / substituídos no modelo estático e que podem controlar o processo de geração de saída. A forma típica de tais parâmetros é
struct
s emap
valores que podem ser aninhados.Exemplo:
Por exemplo, digamos que você queira gerar mensagens de email com esta aparência:
Para gerar corpos de mensagens de email como este, você pode usar o seguinte modelo estático:
E forneça dados como este para executá-lo:
Normalmente, a saída dos modelos é gravada em um
io.Writer
, portanto, se você deseja o resultado como astring
, crie e grave em umbytes.Buffer
(que implementaio.Writer
). Executando o modelo e obtendo o resultado comostring
:Isso resultará na saída esperada:
Experimente no Go Playground .
Observe também que, desde Go 1,10, uma alternativa mais recente, mais rápido, mais especializada está disponível para
bytes.Buffer
o que é:strings.Builder
. O uso é muito semelhante:Experimente este no Go Playground .
Nota: você também pode exibir o resultado da execução de um modelo se fornecer
os.Stdout
como destino (que também implementaio.Writer
):Isso gravará o resultado diretamente em
os.Stdout
. Tente isso no Playground Go .fonte
No seu caso, você precisa usar Sprintf () para formatar string.
func Sprintf(format string, a ...interface{}) string
Sprintf formata de acordo com um especificador de formato e retorna a sequência resultante.
s := fmt.Sprintf("Good Morning, This is %s and I'm living here from last %d years ", "John", 20)
Sua saída será:
fonte
A função fmt.SprintF retorna uma string e você pode formatar a string da mesma maneira que faria com fmt.PrintF
fonte
Podemos personalizar um novo tipo de String via
define new Type
comFormat
suporte.fonte