Maison > développement back-end > Golang > Créer un type à partir d'une tranche

Créer un type à partir d'une tranche

王林
Libérer: 2024-02-05 22:57:07
avant
761 Les gens l'ont consulté

Créer un type à partir dune tranche

Contenu de la question

Je souhaite créer un type de données comme une pile. Je souhaite ajouter et supprimer des entrées "en haut" et pouvoir les imprimer. Dans cet exemple, le type XPath est utilisé pour parcourir le document XML et garder une trace du chemin actuel.

J'ai donc créé un type xpath[]string et écrit les fonctions correspondantes, à savoir : push() pop() et string().

Mon problème est que le type perd son état, ce qui me déroute un peu car je pensais que les tranches étaient des types de référence. De plus, si j'essaie de changer la fonction en récepteur de pointeur, j'obtiens plusieurs erreurs de compilation. Pour résoudre ce problème à ce stade, je viens de changer la chaîne [] en une structure avec un seul champ de chaîne []. Bien que cela me dérange toujours de ne pas pouvoir le faire fonctionner en utilisant uniquement slice comme type de base.

Quelle est la bonne approche ?

package main

import (
    "fmt"
    "strings"
)

type xPath []string

func (xp xPath) push(entry string) {
    xp = append(xp, entry)
}

func (xp xPath) String() string {
    sb := strings.Builder{}
    sb.WriteString("/")
    sb.WriteString(strings.Join(xp, "/"))
    return sb.String()
}

func main() {
    xp := xPath{}
    xp.push("rss")
    xp.push("channel")
    xp.push("items")
    fmt.Println(xp)

    // Output: /
    // Wanted: /rss/channel/items
}
Copier après la connexion


Bonne réponse


Votre fonction push ne fait rien.

Fonctionnalité push correcte :

func (xp *xPath) push(entry string) {
    *xp = append(*xp, entry)
}
Copier après la connexion

Une tranche est un type de référence dans les situations où vous souhaitez modifier sa valeur (par exemple en utilisant un index).

En revanche, si vous souhaitez les réaffecter et remplacer la tranche entière, vous devez utiliser des pointeurs.

Concernant les stacks, il existe de meilleures méthodes : Découvrez cette question.

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!

Étiquettes associées:
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