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
.
Valor | Descrição |
---|---|
\a | Sinal sonoro (alerta) |
\b | Barra de espaço |
\\\ | Barra invertida |
\t | Tabulação Horizontal |
\n | Nova linha |
\r | Carriage return |
\f | Alimentaçã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)