Maison  >  Article  >  développement back-end  >  Comment supprimer certains éléments de la structure reçus par le package importé dans Golang ?

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

WBOY
WBOYavant
2024-02-06 08:40:06980parcourir

如何从 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"`
}

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)

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)

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

Ensuite, utilisez cette nouvelle structure pour rassembler :

var input ImportedStruct
forMarshal:=ImportedStructMarshal(input)
...

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!

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