Typ aus Slice erstellen

王林
Freigeben: 2024-02-05 22:57:07
nach vorne
747 Leute haben es durchsucht

Typ aus Slice erstellen

Frageninhalt

Ich möchte einen Datentyp wie einen Stapel erstellen. Ich möchte Einträge „oben“ hinzufügen und entfernen und diese ausdrucken können. In diesem Beispiel wird der Typ xpath verwendet, um das XML-Dokument zu durchlaufen und den aktuellen Pfad zu verfolgen.

Also habe ich einen xpath[]string-Typ erstellt und die entsprechenden Funktionen geschrieben, nämlich: push() pop() und string().

Mein Problem ist, dass der Typ seinen Zustand verliert, was mich etwas verwirrt, weil ich dachte, Slices seien Referenztypen. Wenn ich versuche, die Funktion in einen Zeigerempfänger zu ändern, erhalte ich außerdem mehrere Kompilierungsfehler. Um dies an dieser Stelle zu beheben, habe ich einfach den []string in eine Struktur mit einem einzelnen []string-Feld geändert. Obwohl es mich immer noch stört, dass ich es nicht zum Laufen bringen kann, wenn ich nur Slice als Basistyp verwende.

Was ist der richtige Ansatz?

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
}
Nach dem Login kopieren


Richtige Antwort


Ihre Push-Funktion macht nichts.

Korrekte Push-Funktionalität:

func (xp *xPath) push(entry string) {
    *xp = append(*xp, entry)
}
Nach dem Login kopieren

Ein Slice ist ein Referenztyp in Situationen, in denen Sie seinen Wert ändern möchten (z. B. mithilfe eines Index).

Wenn Sie sie hingegen neu zuordnen und das gesamte Slice ersetzen möchten, sollten Sie Zeiger verwenden.

In Bezug auf Stapel gibt es einige bessere Möglichkeiten: Schauen Sie sich diese Frage an.

Das obige ist der detaillierte Inhalt vonTyp aus Slice erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage