Saya menerima projek daripada pakej modul pihak ketiga yang diimport:
myitem := importpackage.get()
Ia adalah struktur seperti ini:
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"` }
Saya mahu memadamkan satu atau lebih daripadanya dan mengembalikannya sebagai json daripada golang gin api saya:
c.json(200, &myitem)
Masalahnya ialah cuba mencari penggunaan sumber yang paling cekap untuk melakukan ini.
Saya terfikir untuk membuat gelung dan menulis medan yang saya perlukan ke dalam struktur baharu:
newitem := make([]importedstruct, len(myitem)) i := 0 for _, v := range myitem { newitem[i] = ... ... } c.json(200, &hostlist)
Saya juga mempertimbangkan marshalling dan kemudian unmarshaling untuk menetapkannya kepada struct lain sebelum mengembalikannya melalui 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)
Saya berharap dapat mencari cara yang lebih cekap untuk melakukan ini. myitem
Boleh mempunyai lebih 3 juta baris json dan gelung melalui segala-galanya, atau marshalling dan unmarshaling nampaknya melibatkan lebih banyak proses, kemudian hanya melaksanakan sesuatu yang agak mudah.
EDIT: Strukturnya ialah kepingan ([]).
Tentukan struktur baharu yang merupakan salinan struktur sedia ada anda dengan label berbeza:
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"` }
Kemudian, gunakan struktur baharu ini untuk mengawal:
var input ImportedStruct forMarshal:=ImportedStructMarshal(input) ...
Ini akan berfungsi selagi struktur baharu serasi medan demi medan dengan struktur yang diimport.
Atas ialah kandungan terperinci Bagaimana untuk mengalih keluar item tertentu daripada struktur yang diterima oleh pakej yang diimport dalam golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!