So hängen Sie an ein Slice an, dessen Elementtyp kein benannter Typ in Golang ist

WBOY
Freigeben: 2024-02-09 10:50:19
nach vorne
1134 Leute haben es durchsucht

So hängen Sie an ein Slice an, dessen Elementtyp kein benannter Typ in Golang ist

Der PHP-Editor Banana zeigt Ihnen, wie Sie an ein Slice anhängen, dessen Elementtyp kein benannter Typ in Golang ist. In Golang können wir die integrierte Append-Funktion verwenden, um Elemente an ein Slice anzuhängen. Wenn der Elementtyp des Slice jedoch kein benannter Typ, also ein anonymer Typ, ist, müssen wir zunächst ein temporäres Slice erstellen Hängen Sie die Elemente an den temporären Slice an und kopieren Sie schließlich die Elemente des temporären Slice zurück in den ursprünglichen Slice. Dadurch wird sichergestellt, dass die Daten des ursprünglichen Slice beim Anhängen von Elementen nicht verloren gehen. Als nächstes werden wir die spezifischen Schritte dieses Prozesses detailliert beschreiben.

Frageninhalt

Ich habe zwei Strukturen:

type responsequeryhotel struct {
    querystring *string `json:"querystring"`
    status   string `json:"status"`
    action   string `json:"action"`
    refcode  string `json:"refcode"`
    vendorid string `json:"vendorid"`
    searchtoken *string `json:"searchtoken"`
    data     struct {
        hotels []struct {
            data responsequeryhotelsdata `json:"data"`
        } `json:"hotels"`
    } `json:"data"`
}

type responsequeryhotelsdata struct {
    hotelidvendor      string `json:"hotelidvendor"`
    hotelname          string `json:"hotelname"`
    hoteladdress       string `json:"hoteladdress"`
    hoteldistrict      string `json:"hoteldistrict"`
    hotelcity          string `json:"hotelcity"`
    hotelprovince      string `json:"hotelprovince"`
    hotelcountry       string `json:"hotelcountry"`
    hotellat           string `json:"hotellat"`
    hotellng           string `json:"hotellng"`
    hotelprice         string `json:"hotelprice"`
    hoteldiscountprice string `json:"hoteldiscountprice"`
    hotelphotourl      string `json:"hotelphotourl"`
}
Nach dem Login kopieren

Jetzt muss ich Elemente an responsequeryhotel.data.hotels anhängen, deren Elementtyp kein benannter Name ist. Also habe ich Folgendes versucht:

var output models.responsequeryhotel

var data models.responsequeryhotelsdata
output.data.hotels = append(output.data.hotels, data)
Nach dem Login kopieren

Aber ich bekomme diesen Fehler:

cannot use data (variable of type models.ResponseQueryHotelsData) as struct{Data models.ResponseQueryHotelsData "json:\"data\""} value in argument to append
Nach dem Login kopieren

Wie soll ich Elemente anhängen, um output.data.hotels (将有超过 1 个 responsequeryhotelsdata anzuhängen).

Übrigens kann ich die Struktur nicht ändern (sie liegt außerhalb meiner Kontrolle).

Problemumgehung

Wenn Sie es mehrmals verwenden müssen, definieren Sie einen Alias ​​für denselben zugrunde liegenden Typ:

type hotel = struct {
    data responsequeryhotelsdata `json:"data"`
}
hotels := []hotel{
    {data: responsequeryhotelsdata{}},
    {data: responsequeryhotelsdata{}},
}

output.data.hotels = append(output.data.hotels, hotels...)
Nach dem Login kopieren

Oder wenn Sie es nur einmal benötigen, deklarieren Sie den Strukturtyp an Ort und Stelle:

hotels := []struct {
    Data ResponseQueryHotelsData `json:"data"`
}{
    {Data: ResponseQueryHotelsData{}},
    {Data: ResponseQueryHotelsData{}},
}

output.Data.Hotels = append(output.Data.Hotels, hotels...)
Nach dem Login kopieren
Im Abschnitt „Verteilbarkeit“ der

Golang-Spezifikation heißt es: Ein Wert x vom Typ v ist einer Variablen vom Typ t zuweisbar („x ist t zuweisbar“), wenn eine der folgenden Bedingungen zutrifft:

v ist dasselbe wie t.
  • v und t haben denselben zugrunde liegenden Typ, sind aber keine Typparameter, und mindestens einer von v oder t ist kein benannter Typ.
  • v und t sind Kanaltypen mit demselben Elementtyp, v ist ein bidirektionaler Kanal und mindestens einer von v oder t ist kein benannter Typ.
  • t ist ein Schnittstellentyp, aber kein Typparameter, und x implementiert t.
  • x ist der vordeklarierte Bezeichner nil und t ist ein Zeiger-, Funktions-, Slice-, Map-, Kanal- oder Schnittstellentyp, aber kein Typparameter.
  • x ist eine untypisierte Konstante, die durch einen Wert vom Typ t dargestellt werden kann.

Das obige ist der detaillierte Inhalt vonSo hängen Sie an ein Slice an, dessen Elementtyp kein benannter Typ in Golang ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!