Maison  >  Article  >  développement back-end  >  Comment ajouter à une tranche dont le type d'élément n'est pas un type nommé dans Golang

Comment ajouter à une tranche dont le type d'élément n'est pas un type nommé dans Golang

WBOY
WBOYavant
2024-02-09 10:50:191135parcourir

Comment ajouter à une tranche dont le type délément nest pas un type nommé dans Golang

l'éditeur php Banana vous présentera comment attacher à une tranche dont le type d'élément n'est pas un type nommé en golang. Dans Golang, nous pouvons utiliser la fonction append intégrée pour ajouter des éléments à une tranche, mais si le type d'élément de la tranche n'est pas un type nommé, c'est-à-dire un type anonyme, nous devons d'abord créer une tranche temporaire, puis ajoutez les éléments à la tranche temporaire, et enfin copiez ensuite les éléments de la tranche temporaire dans la tranche d'origine. Cela garantit que les données de la tranche d'origine ne sont pas perdues lors de l'ajout d'éléments. Ensuite, nous détaillerons les étapes spécifiques de ce processus.

Contenu des questions

J'ai deux structures :

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

Maintenant, je dois ajouter des éléments à responsequeryhotel.data.hotels dont le type d'élément n'est pas un nom nommé. Alors j'ai essayé ceci :

var output models.responsequeryhotel

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

Mais j'obtiens cette erreur :

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

Comment dois-je joindre des éléments à output.data.hotels (将有超过 1 个 responsequeryhotelsdataappend).

BTW, je ne peux pas changer la structure (c'est hors de mon contrôle).

Solution

Si vous devez l'utiliser plusieurs fois, définissez un alias pour le même type sous-jacent :

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

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

Ou si vous n'en avez besoin qu'une seule fois, déclarez le type struct en place :

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

output.Data.Hotels = append(output.Data.Hotels, hotels...)
La section

distributabilité de la spécification golang indique :

Une valeur x de type v est attribuable à une variable de type t ("x est attribuable à t") si l'une des conditions suivantes est vraie :

  • v est identique à t.
  • v et t ont le même type sous-jacent, mais ne sont pas des paramètres de type, et au moins l'un des v ou t n'est pas un type nommé.
  • v et t sont des types de canaux avec le même type d'élément, v est un canal bidirectionnel et au moins l'un des v ou t n'est pas un type nommé.
  • t est un type d'interface mais pas un paramètre de type, et x implémente t.
  • x est l'identifiant prédéclaré nil et t est un type de pointeur, de fonction, de tranche, de carte, de canal ou d'interface, mais pas un paramètre de type.
  • x est une constante non typée qui peut être représentée par une valeur de type t.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer