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 ([]).
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!