¿Cómo se escriben cadenas multilíneas en Go?
Tiene algo similar a las cadenas multilínea de python:
"""line 1
line 2
line 3"""
Si no, ¿cuál es la forma preferida de escribir cadenas que abarcan varias líneas?
7 answers
De acuerdo con la especificación del lenguaje puede usar un literal de cadena sin procesar, donde la cadena está delimitada por palancas en lugar de comillas dobles.
`line 1
line 2
line 3`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-01 10:43:17
Puedes escribir:
"line 1" +
"line 2" +
"line 3"
Que es lo mismo que:
"line 1line 2line3"
A diferencia del uso de marcas de retroceso, preservará los caracteres de escape. Tenga en cuenta que el " + "debe estar en la línea 'inicial', es decir:
"line 1"
+"line 2"
Genera un error.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-26 06:26:54
- el literal de cadena raw admite multilínea (pero los caracteres escapados no se interpretan)
- interpreted string literal interpreta caracteres escapados, como '
\n
'.
Pero, si tu cadena de varias líneas tiene que incluir una backquote (`), entonces tendrás que usar un literal de cadena interpretado:
`line one
line two ` +
"`" + `line three
line four`
No se puede poner directamente una backquote (`) en un literal de cadena raw (`xx\
).
Usted tiene que utilizar (como se explica en " ¿cómo poner un backquote en una cadena backquoted?"):
+ "`" + ...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:26
Use literales de cadena sin procesar para cadenas de varias líneas:
func main(){
multiline := `line
by line
and line
after line`
}
Literales de cadena sin procesar
Los literales de cadena sin procesar son secuencias de caracteres entre comillas, como en
foo
. Dentro de las comillas, puede aparecer cualquier carácter excepto la comilla invertida.
Una parte significativa es que es raw literal no solo multilínea y ser multilínea no es el único propósito de ello.
El valor de un literal de cadena raw es la cadena compuesta por el no interpretado (implícitamente codificado en UTF-8) los caracteres entre las comillas; en particular, las barras invertidas no tienen un significado especial...
Así que los escapes no se interpretarán y las nuevas líneas entre marcas serán verdaderas nuevas líneas.
func main(){
multiline := `line
by line \n
and line \n
after line`
// \n will be just printed.
// But new lines are there too.
fmt.Print(multiline)
}
Concatenación
Posiblemente tenga una línea larga que desea romper y no necesita nuevas líneas en ella. En este caso se podría utilizar la concatenación de cadenas.
func main(){
multiline := "line " +
"by line " +
"and line " +
"after line"
fmt.Print(multiline) // No new lines here
}
Dado que "" se interpreta cadena, los escapes literales serán interpretar.
func main(){
multiline := "line " +
"by line \n" +
"and line \n" +
"after line"
fmt.Print(multiline) // New lines as interpreted \n
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-07 07:15:58
Puedes poner contenido con " a su alrededor, como
var hi = `I am here,
hello,
`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-24 01:50:54
Hay que tener mucho cuidado con el formato y el espaciado de líneas en go, todo cuenta y aquí hay una muestra de trabajo, pruébelo https://play.golang.org/p/c0zeXKYlmF
package main
import "fmt"
func main() {
testLine := `This is a test line 1
This is a test line 2`
fmt.Println(testLine)
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-29 23:17:37
Puede usar literales crudos. Ejemplo
s:=`stack
overflow`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-24 08:41:34