Heim  >  Artikel  >  Backend-Entwicklung  >  Vielleicht Bag in Golang (Typ string und string stimmen nicht überein)

Vielleicht Bag in Golang (Typ string und string stimmen nicht überein)

WBOY
WBOYnach vorne
2024-02-09 08:06:18401Durchsuche

也许是 golang 中的 bag(类型字符串和字符串不匹配)

PHP-Redakteur Xinyi stellt Ihnen die Taschentypen in Golang vor. In Golang bezieht sich der Bag-Typ auf eine Datenstruktur, die zum Speichern einer Sammlung von Elementen verwendet wird. Im Gegensatz zu anderen Datenstrukturen können Elemente in einer Tasche wiederholt vorkommen und die Reihenfolge spielt keine Rolle. Dies bedeutet, dass der Beuteltyp in Situationen sehr nützlich ist, in denen keine Reihenfolge erforderlich ist, z. B. bei der Berechnung der Häufigkeit von Elementen oder bei der Bestimmung, ob ein Element vorhanden ist. Es ist zu beachten, dass der Taschentyp und der String-Typ in Golang nicht übereinstimmen. Daher müssen Sie bei der Verwendung auf Probleme bei der Typkonvertierung achten.

Frageninhalt

Fragen Sie mich nicht, warum ich das mache, sondern sagen Sie mir einfach, wie es möglich ist:

gopls-Fehler: Zeichenfolge und Zeichenfolgentyp stimmen nicht überein

type mapsi2[t string | int | float32 | float64] struct {
    keys   []string
    values []t
}

func (mapsi mapsi2[string]) setvalue(key string, value string) {
    for i, keymapsi := range mapsi.keys {
        if key == keymapsi {
            mapsi.values[i] = value
        }
    }
}

Zuerst dachte ich, der LSP-Server sei dumm, aber das war nicht der Fall.

Fehler aufgetreten: Zeichenfolge und Zeichenfolgentyp stimmen nicht überein

go run ./cmd/app
# devllart/foobarman/src/mapsi
src/mapsi/mapsi.go:48:13: invalid operation: key == keyMapsi (mismatched types string and string)
make: *** [Makefile:6: run] Error 2

Ich habe gegoogelt und in den Suchergebnissen erhalte ich nur dann eine Fehlermeldung, wenn ich Zeiger mit Zeichenfolgen vergleiche... genau dort, der Typ ist alles in Ordnung, oder ich liege falsch.

Workaround

Ihre Methodensignatur sollte func (mapsi Mapsi2[T]) SetValue(key string, value T) lauten.

Hängt nicht mit Ihrem Kompilierungsproblem zusammen, aber bitte beachten Sie:

  • Möglicherweise möchten Sie einen Zeigerempfänger verwenden, damit Änderungen über Methodenaufrufe hinaus bestehen bleiben
  • Möglicherweise möchten Sie auch den Fall bearbeiten, dass der Schlüssel nicht gefunden wird

Auf dem Spielplatz ansehen: https://www.php.cn/link/6934456f54af5ab56c6f347c6427afeb一个>.

Das obige ist der detaillierte Inhalt vonVielleicht Bag in Golang (Typ string und string stimmen nicht überein). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen