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


Est-ce que Go a quelque chose de similaire aux chaînes multilignes du python:

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

Si non, quelle est la manière préférée d'écrire des chaînes sur plusieurs lignes?


424
2017-10-28 18:44


origine


Réponses:


Selon le spécification du langage vous pouvez utiliser un littéral de chaîne brut, où la chaîne est délimitée par des guillemets au lieu de guillemets doubles.

`line 1
line 2
line 3`

698
2017-10-28 18:46



Tu peux écrire:

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

qui est la même que:

"line 1line 2line3"

Contrairement aux ticks de retour, il conservera les caractères d'échappement. Notez que le "+" doit être sur la ligne "leader", c'est-à-dire:

"line 1"
+"line 2"

génère une erreur.


72
2017-12-01 22:11



De Littéraux de chaîne:

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

Mais, si votre chaîne multiligne doit inclure une citation arrière (`), alors 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 une backquote (`) dans un littéral de chaîne brute (` `xx\).
Vous devez utiliser (comme expliqué dans "comment mettre une backquote dans une chaîne de retour?"):

 + "`" + ...

25
2018-02-13 11:54



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 brute

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 à l'exception de la citation arrière.

Une partie importante est que c'est brut littéral non seulement multi-ligne et d'être multi-ligne n'est pas le seul but de celui-ci.

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

Donc, les évasions ne seront pas interprétées et les nouvelles lignes entre les tiques seront de véritables nouvelles lignes.

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 voulez casser et vous n'avez pas besoin de nouvelles lignes dedans. Que vous pourriez utiliser la concaténation de chaîne.

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

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

Puisque "" est interprété, les échappées littérales seront interprétées.

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

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

16
2018-01-29 12:33



Vous pouvez mettre du contenu avec `` autour, comme

var hi = `I am here,
hello,
`

4
2018-04-24 01:50



Vous devez être très prudent sur le formatage et l'espacement des lignes, tout compte et voici un exemple de travail, 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
2018-06-29 23:17