Maison > Article > développement back-end > Octets et chaînes Golang
l'éditeur php Youzi vous amènera à explorer en profondeur les octets et les chaînes de Golang. Dans Golang, les octets et les chaînes sont des types de données courants, mais il existe des différences subtiles et des méthodes de conversion entre eux. Comprendre ces différences et méthodes de conversion vous aidera à mieux traiter vos données et à optimiser les performances du programme. Cet article présentera les concepts d'octets et de chaînes, les méthodes de conversion mutuelle et leurs scénarios d'utilisation dans des applications pratiques, vous aidant à mieux comprendre et appliquer les octets et les chaînes dans Golang. Explorons ensemble !
J'essaie de trouver des éléments communs entre deux chaînes de longueur égale en golang.
L'élément est trouvé, mais la représentation sous forme de chaîne semble également contenir des valeurs en octets. Comment puis-je m'en débarrasser?
func main() { println(fmt.printf("common element = %s", findcommonelement("abcdefghi", "ijklmnopq"))) } func findcommonelement(firstelements, secondelements string) string { elementsinfirstgroup := make(map[string]bool) for _, charvalue := range firstelements { elementsinfirstgroup[string(charvalue)] = true } for index := range firstelements { if _, ok := elementsinfirstgroup[string(secondelements[index])]; ok { matchingelem := secondelements[index] println(string(matchingelem)) return string(matchingelem) } } panicmessage := fmt.sprintf("could not find a common item between %s and %s", firstelements, secondelements) panic(panicmessage) }
Le résultat que j'obtiens est
i common element = i18 (0x0,0x0)
Codez ici
Vous devez utiliser fmt.sprintf
而不是 fmt.printf
.
Et évitez d'utiliser le println
,而是使用 fmt.println
intégré.
https://pkg.go.dev/[email protected]#printf
func printf(format string, a ...any) (n int, err error)
printf formate selon un spécificateur de format et écrit sur la sortie standard. Il renvoie le nombre d'octets écrits et les erreurs d'écriture rencontrées.
Donc 18 (0x0,0x0)
...
18
是字符串 "common element = i"
. (0x0,0x0)
是由 println
打印的 nil
Valeur d'erreur. Plus important encore, votre algorithme est défectueux car il mélange des octets avec des runes. Quand tu fais range
时,迭代变量 charvalue
将被分配一个 rune
,它可能是多字节的。但是,当您索引字符串(例如 secondelements[index]
)时,其结果始终是单个 byte
sur une ficelle. Par conséquent, des paniques ou du charabia (octets invalides) seront inévitablement le résultat de votre fonction. Voir Exemple.
Vous pouvez obtenir de meilleurs résultats en procédant comme suit :
func findCommonElement(firstElements, secondElements string) string { second := map[rune]bool{} for _, r := range secondElements { second[r] = true } for _, r := range firstElements { if second[r] { fmt.Println(string(r)) return string(r) } } panic("...") }
https://www.php.cn/link/dbdc69ea6ccbdea0ca2d796e1af24ebf
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!