Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menambah pada kepingan yang jenis elemennya bukan jenis bernama dalam golang

Bagaimana untuk menambah pada kepingan yang jenis elemennya bukan jenis bernama dalam golang

WBOY
WBOYke hadapan
2024-02-09 10:50:191134semak imbas

Bagaimana untuk menambah pada kepingan yang jenis elemennya bukan jenis bernama dalam golang

editor php Banana akan memperkenalkan anda cara melekat pada kepingan yang jenis elemennya bukan jenis bernama dalam golang. Di Golang, kita boleh menggunakan fungsi tambah terbina dalam untuk menambahkan elemen pada hirisan, tetapi jika jenis elemen hirisan bukan jenis yang dinamakan, iaitu jenis tanpa nama, kita perlu mencipta hirisan sementara dahulu, kemudian tambahkan elemen pada kepingan sementara, dan akhir sekali Kemudian salin elemen kepingan sementara kembali ke kepingan asal. Melakukan ini memastikan bahawa data kepingan asal tidak hilang semasa menambahkan elemen. Seterusnya, kami akan memperincikan langkah-langkah khusus proses ini.

Kandungan soalan

Saya mempunyai dua struktur:

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"`
}

Kini saya perlu menambahkan item pada responsequeryhotel.data.hotels yang jenis elemennya bukan nama yang dinamakan. Jadi saya mencuba ini:

var output models.responsequeryhotel

var data models.responsequeryhotelsdata
output.data.hotels = append(output.data.hotels, data)

Tetapi saya mendapat ralat ini:

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

Bagaimana saya harus melampirkan item pada output.data.hotels (将有超过 1 个 responsequeryhotelsdata tambah).

BTW, saya tidak boleh mengubah struktur (itu di luar kawalan saya).

Penyelesaian

Jika anda perlu menggunakannya beberapa kali, tentukan alias untuk jenis asas yang sama:

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

output.data.hotels = append(output.data.hotels, hotels...)

Atau jika anda hanya memerlukannya sekali, isytiharkan jenis struct di tempatnya:

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

output.Data.Hotels = append(output.Data.Hotels, hotels...)
Bahagian

kebolehdistribusian dalam spesifikasi golang menyatakan:

Nilai x jenis v boleh diserahkan kepada pembolehubah jenis t ("x boleh diserahkan kepada t") jika salah satu daripada syarat berikut adalah benar:

  • v adalah sama dengan t.
  • v dan t mempunyai jenis asas yang sama, tetapi bukan parameter jenis, dan sekurang-kurangnya satu daripada v atau t bukan jenis yang dinamakan.
  • v dan t ialah jenis saluran dengan jenis elemen yang sama, v ialah saluran dwiarah dan sekurang-kurangnya satu daripada v atau t bukan jenis yang dinamakan.
  • t ialah jenis antara muka tetapi bukan parameter jenis, dan x melaksanakan t.
  • x ialah pengecam yang diisytiharkan nil dan t ialah penunjuk, fungsi, kepingan, peta, saluran atau jenis antara muka, tetapi bukan parameter jenis.
  • x ialah pemalar tidak bertaip yang boleh diwakili oleh nilai jenis t.

Atas ialah kandungan terperinci Bagaimana untuk menambah pada kepingan yang jenis elemennya bukan jenis bernama dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam