web-dev-qa-db-fra.com

Comment écrivez-vous des chaînes multilignes dans Go?

Go a-t-il quelque chose de similaire aux chaînes multilignes de Python:

"""line 1
line 2
line 3"""

Sinon, quelle est la méthode préférée pour écrire des chaînes couvrant plusieurs lignes?

543
aeter

Selon la spécification de langue , vous pouvez utiliser un littéral de chaîne brute, la chaîne étant délimitée par des guillemets au lieu de guillemets doubles.

`line 1
line 2
line 3`
877
Mark Byers

Tu peux écrire:

"line 1" +
"line 2" +
"line 3"

qui est le même que:

"line 1line 2line3"

Contrairement aux tiques de retour, il préservera les caractères d'échappement. Notez que le "+" doit figurer sur la ligne "principale", à savoir:

"line 1"
+"line 2"

génère une erreur.

97

De littéraux de chaîne :

  • chaîne littérale brute prend en charge multiligne (mais les caractères d'échappement ne sont pas interprétés)
  • chaîne interprétée interprète les caractères d'échappement, comme '\n'.

Toutefois, si votre chaîne multiligne doit inclure une citation arrière (`), vous devrez utiliser un littéral de chaîne interprété:

`line one
  line two ` +
"`" + `line three
line four`

Vous ne pouvez pas mettre directement un backquote (`) dans un littéral de chaîne brute (` `xx\).
Vous devez utiliser (comme expliqué dans " comment mettre un backquote dans une chaîne entre guillemets? "):

 + "`" + ...
34
VonC

Utilisez des littéraux de chaîne bruts pour les chaînes multilignes:

func main(){
    multiline := `line 
by line
and line
after line`
}

Littéraux de chaîne bruts

Les littéraux de chaîne bruts sont des séquences de caractères entre guillemets, comme dans `foo`. Dans les citations, n'importe quel caractère peut apparaître sauf citation en arrière.

Une partie importante est que brut littéral ne se limite pas à plusieurs lignes et être multiligne n’est pas le seul objectif de celle-ci.

La valeur d'un littéral de chaîne brute est la chaîne composée des caractères non interprétés (codés implicitement en UTF-8) entre les guillemets; en particulier, les barres obliques inverses n'ont pas de signification particulière ...

Les échappées ne seront donc pas interprétées et les nouvelles lignes entre ticks seront de nouvelles lignes réelles.

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)
}

Enchaînement

Vous avez peut-être une longue ligne que vous souhaitez interrompre et vous n'avez pas besoin de nouvelles lignes. Dans ce cas, vous pouvez utiliser la concaténation de chaînes.

func main(){
    multiline := "line " +
            "by line " +
            "and line " +
            "after line"

    fmt.Print(multiline) // No new lines here
}

Puisque "" est interprété, les échappements littéraux de chaîne seront interprétés.

func main(){
    multiline := "line " +
            "by line \n" +
            "and line \n" +
            "after line"

    fmt.Print(multiline) // New lines as interpreted \n
}
23
I159

Go et des chaînes multilignes

En utilisant les ticks arrière, vous pouvez avoir des chaînes multilignes:

package main

import "fmt"

func main() {

    message := `This is a 
Multi-line Text String
Because it uses the raw-string back ticks 
instead of quotes.
`

    fmt.Printf("%s", message)
}

Au lieu d’utiliser les symboles de guillemets doubles (“) ou de guillemets simples (‘), utilisez plutôt des traits de retour pour définir le début et la fin de la chaîne. Vous pouvez ensuite l'enrouler sur plusieurs lignes.

Si vous indenter la chaîne cependant, rappelez-vous que l'espace blanc comptera.

S'il vous plaît vérifier le terrain de je et faire des expériences avec elle.

7
ASHWIN RAJEEV

Vous pouvez mettre du contenu avec `` autour de lui, comme

var hi = `I am here,
hello,
`
4
liam

Vous devez faire très attention au formatage et à l'espacement des lignes, tout compte et voici un exemple qui fonctionne. Essayez-le 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)
}
3
David

vous pouvez utiliser des littéraux bruts. Exemple

s:=`stack
overflow`
1
Prabesh P

Pour moi, c’est ce que j’utilise si ajouter \n ne pose pas de problème.

fmt.Sprintf("Hello World\nHow are you doing today\nHope all is well with your go\nAnd code")

Sinon, vous pouvez utiliser le raw string

multiline := `Hello Brothers and sisters of the Code
              The grail needs us.
             `
0
Ofonime Francis