Selon la 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.
En remarque: la «citation brute», comme on l'appelle, n'analyse pas les séquences d'échappement. C'est donc la chaîne littérale de choix pour écrire des modèles d'expressions régulières car ils contiennent généralement des séquences d'échappement non standard qui inciteraient le compilateur Go à se plaindre de ne pas être à double échappement. Il garde les motifs propres et relativement lisibles.
jimt
10
Vous devez cependant être prudent lorsque vous utilisez des espaces de fin. Par exemple, si vous mettez un espace après, line 1il sera invisible dans votre éditeur mais présent dans la chaîne.
Ory Band
2
@DanieleD C'est un léger non séquestre, mais quel dialecte? Vraisemblablement principalement MySQL? stackoverflow.com/a/10574031 Notez que par extension du même argument, c'est difficile d'incorporer du démarquage ou des scripts shell (si vous choisissez d'utiliser le backtick à la place de $(abcd)).
Ivan Vučica
8
@KyleHeuton: On peut supposer que Daniele D utilise le caractère de backtick dans ses requêtes SQL (comme le font souvent les utilisateurs de MySQL), et trouve pénible de devoir le représenter comme `+" `" + `et de rompre la copie et la collabilité.
ruakh
1
L'inconvénient est que si vous l'écrivez dans du code en retrait, des onglets seront inclus dans la chaîne, et si vous vous en débarrassiez, votre code serait laid. Dans de telles circonstances, je préférerais utiliser la réponse d'Azeem
Lost Crotchet
112
Tu peux écrire:
"line 1"+"line 2"+"line 3"
ce qui équivaut à:
"line 1line 2line3"
Contrairement à l'utilisation des tiques arrière, il préservera les caractères d'échappement. Notez que le "+" doit être sur la ligne "principale", c'est-à-dire:
Cette solution n'est pas analogue aux chaînes multilignes de Python. Il fractionne le littéral de chaîne sur plusieurs lignes, mais la chaîne elle-même ne contient pas plusieurs lignes.
Ben Butler-Cole
2
Comme cela préserve les caractères d'échappement, de nouvelles lignes peuvent être simplement ajoutées avec \net il est beaucoup plus facile de travailler avec des chaînes dynamiques et autres. Si j'ai raison, la réponse acceptée est vraiment pour les chaînes statiques dans le code pour le rendre joli.
RisingSun
1
Cela ne serait-il pas très inefficace également? Soit la chaîne 3x une séquence de 6 caractères: 6 + 2 * 6 + 3 * 6 = 36 caractères alloués lorsque la valeur optimale serait 18 (puisque les chaînes sont immuables, chaque fois que vous ajoutez deux chaînes, une nouvelle chaîne est créée avec la longueur des deux cordes concaténées).
N0thing
@ N0thing: s'il n'y a que des littéraux de chaîne, il n'y a pas de différences d'exécution car le compilateur optimisera. Mais il y a une petite différence (microsecondes, voire nanosecondes) dans le temps de compilation.
dolmen
Je crois que c'est la meilleure façon d'obtenir un littéral de chaîne multiligne avec des fins de ligne CRLF
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 guillemets, n'importe quel caractère peut apparaître sauf les guillemets arrière.
Une partie importante est que le littéral brut n'est pas seulement multi-lignes et être multi-lignes 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 encodés en UTF-8) entre les guillemets; en particulier, les barres obliques inverses n'ont pas de signification particulière ...
Les échappements ne seront donc pas interprétés et les nouvelles lignes entre les ticks 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 rompre 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}
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 guillemets doubles («) ou les symboles de guillemets simples ('), utilisez plutôt des graduations pour définir le début et la fin de la chaîne. Vous pouvez ensuite l'enrouler sur plusieurs lignes.
Si vous indentez la chaîne, n'oubliez pas que l'espace blanc comptera.
Veuillez vérifier le terrain de jeu et faire des expériences avec.
Vous devez être très prudent sur le formatage et l'espacement des lignes dans go, 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)}
Réponses:
Selon la 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.
la source
line 1
il sera invisible dans votre éditeur mais présent dans la chaîne.$(abcd)
).Tu peux écrire:
ce qui équivaut à:
Contrairement à l'utilisation des tiques arrière, il préservera les caractères d'échappement. Notez que le "+" doit être sur la ligne "principale", c'est-à-dire:
génère une erreur.
la source
\n
et il est beaucoup plus facile de travailler avec des chaînes dynamiques et autres. Si j'ai raison, la réponse acceptée est vraiment pour les chaînes statiques dans le code pour le rendre joli.Des littéraux de chaîne :
\n
'.Mais, si votre chaîne multi-lignes doit inclure une citation arrière (`), alors vous devrez utiliser un littéral de chaîne interprété:
Vous ne pouvez pas mettre directement un guillemet arrière (`) dans un littéral de chaîne brute (` `xx
\
).Vous devez utiliser (comme expliqué dans " comment mettre un backquote dans une chaîne backquoted? "):
la source
Utilisez des littéraux de chaîne bruts pour les chaînes multilignes:
Littéraux de chaîne bruts
Une partie importante est que le littéral brut n'est pas seulement multi-lignes et être multi-lignes n'est pas le seul but de celui-ci.
Les échappements ne seront donc pas interprétés et les nouvelles lignes entre les ticks seront de véritables nouvelles lignes .
Enchaînement
Vous avez peut-être une longue ligne que vous voulez rompre et vous n'avez pas besoin de nouvelles lignes. Dans ce cas, vous pouvez utiliser la concaténation de chaînes.
Puisque "" est interprété, les échappements littéraux de chaîne seront interprétés.
la source
Go et chaînes multilignes
En utilisant les ticks arrière, vous pouvez avoir des chaînes multilignes:
Au lieu d'utiliser les guillemets doubles («) ou les symboles de guillemets simples ('), utilisez plutôt des graduations pour définir le début et la fin de la chaîne. Vous pouvez ensuite l'enrouler sur plusieurs lignes.
Veuillez vérifier le terrain de jeu et faire des expériences avec.
la source
Vous pouvez mettre du contenu avec `` autour de lui, comme
la source
Vous devez être très prudent sur le formatage et l'espacement des lignes dans go, tout compte et voici un exemple de travail, essayez-le https://play.golang.org/p/c0zeXKYlmF
la source
vous pouvez utiliser des littéraux bruts. Exemple
la source
Pour moi, c'est ce que j'utilise si l'ajout
\n
n'est pas un problème.Sinon, vous pouvez utiliser le
raw string
la source