Maison > développement back-end > Golang > Octets et chaînes Golang

Octets et chaînes Golang

WBOY
Libérer: 2024-02-09 09:00:29
avant
913 Les gens l'ont consulté

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 !

Contenu de la question

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)
}
Copier après la connexion

Le résultat que j'obtiens est

i
common element = i18 (0x0,0x0)
Copier après la connexion

Codez ici

Solution de contournement

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)
Copier après la connexion

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

    Nombre de caractères dans
  • 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("...")
}
Copier après la connexion

//m.sbmmt.com/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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal