Maison > développement back-end > Golang > 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
Libérer: 2024-02-09 10:50:19
avant
1174 Les gens l'ont consulté

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"`
}
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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...)
Copier après la connexion

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...)
Copier après la connexion
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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal