Différenciation des caractères de nouvelle ligne dans Go
Dans Go, la lecture de la chaîne de sortie à partir de commandes externes peut poser des problèmes pour différencier le caractère de nouvelle ligne « n » dans le contenu de la chaîne et les sauts de ligne réels.
Le Problème
Lors de l'utilisation de méthodes telles que strings.Split(output, "n") ou bufio.NewScanner(strings.NewReader(output)), le tampon de chaîne se divise à n'importe quelle instance du caractère "n" , qu'il s'agisse d'un caractère de saut de ligne ou d'une partie du contenu de la chaîne.
Le Solution
Le problème survient parce que Go échappe aux caractères de saut de ligne dans les littéraux de chaîne entourés de backticks. Pour différencier les sauts de ligne échappés des sauts de ligne réels, vous pouvez utiliser l'approche suivante :
import "strings" func ProcessStringOutput(output []byte) []string { // Replace escaped line breaks with actual line breaks output = []byte(strings.Replace(string(output), `\n`, "\n", -1)) // Split into lines return strings.Split(string(output), "\n") }
Cette fonction convertit les sauts de ligne échappés intégrés en sauts de ligne réels, permettant une division de ligne appropriée sans perturber le contenu de la chaîne.
Exemple d'utilisation
Étant donné la chaîne suivante sortie :
First line: "test1" Second line: "123;\n234;\n345;" Third line: "456;\n567;" Fourth line: "test4"
La fonction produira trois lignes au lieu de sept :
[]string{"First line: \"test1\"", "Second line: \"123;\n234;\n345;\"", "Third line: \"456;\n567;\""}
Cette méthode permet d'analyser des chaînes multilignes tout en préservant les caractères de nouvelle ligne internes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!