Maison > développement back-end > Golang > le corps du texte

Comment supprimer certains éléments de la structure reçus par le package importé dans Golang ?

WBOY
Libérer: 2024-02-06 08:40:06
avant
976 Les gens l'ont consulté

如何从 golang 中导入的包接收的结构中删除某些项目?

Contenu de la question

J'ai reçu un projet issu du package d'un module tiers importé :

myitem := importpackage.get()

C'est une structure comme celle-ci :

type importedstruct struct {
    ip                  net.ip                  `json:"ip"`
    index               uint32                  `json:"index"`
    localindex          uint32                  `json:"localindex"`
    remoteindex         []*udp.addr             `json:"remoteindex"`
    certificates        *certificates           `json:"certificates"`
    vpnaddress          []iputil.vpnip          `json:"vpnaddress"`
}
Copier après la connexion

Je souhaite en supprimer un ou plusieurs et le renvoyer au format json de mon API golang gin :

c.json(200, &myitem)

Le problème est d’essayer de trouver l’utilisation la plus efficace des ressources pour y parvenir.

J'ai pensé à faire une boucle et à écrire les champs dont j'ai besoin dans une nouvelle structure :

newitem := make([]importedstruct, len(myitem))

i := 0
for _, v := range myitem {
    newitem[i] = ...
    ...
}

c.json(200, &hostlist)
Copier après la connexion

J'ai également envisagé de le marshaller puis de le démarshaler pour l'attribuer à une autre structure avant de le renvoyer via l'API :

// Marshal the host map to json
marshaledJson, err := json.Marshal(newItem)
if err != nil {
    log.Error(err)
    c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
    return
}

// Unmarshal the json into structs
var unmarshalledJson []ImportedStruct
err = json.Unmarshal(marshaledJson, &unmarshalledJson)
if err != nil {
    log.Error(err)
    c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
    return
}

// Return the modified host map
c.JSON(200, &unmarshalledJson)
Copier après la connexion

J'espère trouver un moyen plus efficace de procéder. myitem Il pourrait y avoir plus de 3 millions de lignes de json et parcourir tout, ou le marshalling et le unmarshaling semblent impliquer plus de processus, alors il suffit d'implémenter quelque chose de relativement simple.

EDIT : La structure est une tranche ([]).


Bonne réponse


Définissez une nouvelle structure qui est une copie de votre structure existante avec différentes étiquettes :

type importedstructmarshal struct {
    ip                  net.ip                  `json:"ip"`
    index               uint32                  `json:"index"`
    localindex          uint32                  `json:"-"`
    remoteindex         []*udp.addr             `json:"remoteindex"`
    certificates        *certificates           `json:"certificates"`
    vpnaddress          []iputil.vpnip          `json:"vpnaddress"`
}
Copier après la connexion

Ensuite, utilisez cette nouvelle structure pour rassembler :

var input ImportedStruct
forMarshal:=ImportedStructMarshal(input)
...
Copier après la connexion

Cela fonctionnera tant que la nouvelle structure est compatible champ par champ avec la structure importée.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!