No artigo passado, abordamos sobre as strings e um pouco da diferença entre elas e as runes. Caso não tenha visto clique aqui para ler o artigo. Assim como abordamos que as strings em Go são uma sequência de byte, também explicamos sobre strings liteiras interpretadas e strings literais de valor bruto, entender essa diferença nos ajudará a compreender o que é a sequência de escape.

String literal de valor bruto

São delimitadas por duas crases, podem conter quebras de linhas, barras invertidas não tem nenhum significado, os textos são retratados da maneira que são descritos, exemplo:

package main

func main() {
    print(`Hello World
    Multi-line /t /n`)
}

// Output:
//Hello World
//      Multi-line /t /n%

String literal interpretada

Diferentemente da strings literais de valor bruto, dentro de uma string interpretada, não é permitido a quebra de linha, assim como as barras invertidas tem um significado especial, pois podemos inserir uma sequência de escape, por exemplo:

package main

// No caso a abaixo, o caracter \n
// é uma nova linha,
// e o caracter \t é um tab horizontal

func main() {
    print("Minha string\n literal\t")
}

// Output:
//Minha string
// literal        %

Mas afinal, o que é uma sequência de escape?

Podemos dizer que a sequência de escape é um subconjunto de carácteres que juntos forma um carácter de escape, que tem por sua finalidade alterar o significado do seu sucessor, como, por exemplo vimos no código acima, com o \n.

Os carácteres de escapes informam ao compilador que interprete a informação de maneira diferente, a sequência de escape é constituída normalmente pelo carácter de escape e o carácter com o significado alterado, em geral, utiliza-se o carácter \.

Caso o carácter que preceder a \, não seja um carácter válido de escape, o compilador ignora o carácter de escape, e utiliza-o como um string literal. Um exemplo para isso seria \c, que não é um carácter de escape válido, o compilador usaria apenas o carácter c como parte da string.

Vimos que uma string literal interpretada em Go é delimitada pelas aspas duplas, porém como poderíamos ter uma string que possuísse também aspas duplas? Veja o código abaixo para entender como podemos resolver isso.

package main

func main() {
    // Utilizamos o carácter de escape \" para
    // informar ao compilador que estamos utilizando
    // aspas duplas como parte de nosso texto, e não
    // como a delimitação da string.
    print("Um exemplo de texto de \"escape\"")
}

Go e sequência de escape

Agora que entendemos, como funciona essa sútil diferença, veja a tabela abaixo com as sequências de escape disponíveis para ser utilizada em Go.

ValorDescrição
\aSinal sonoro (alerta)
\bBarra de espaço
\\\Barra invertida
\tTabulação Horizontal
\nNova linha
\rCarriage return
\fAlimentação de formulário
\’Aspas simples ( Pode ser usado apenas com runes)
\”Aspas duplas ( Pode ser usado apenas com strings)

Ainda, possuímos quatro formatos diferentes:

  • \x seguido por exato dois números decimais
  • \000 seguido por três números octais
  • \u seguido por quatro números hexadecimais (unicode)
  • \U seguido por oito números hexadecimais (unicode)

signature