我從匯入的第三方模組的套件中收到一個項目:
myitem := importpackage.get()
它是一個像這樣的結構:
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"` }
我想刪除其中的一項或多項,然後再從我的 golang gin api 以 json 形式返回:
c.json(200, &myitem)
問題是試圖找到最有效的資源利用方式來做到這一點。
我考慮了一個循環並將我需要的字段寫入一個新結構:
newitem := make([]importedstruct, len(myitem)) i := 0 for _, v := range myitem { newitem[i] = ... ... } c.json(200, &hostlist)
我還考慮過編組,然後解組以將其分配給另一個結構,然後再透過 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)
我希望找到一種更有效的方法來做到這一點。 myitem
可能包含超過 300 萬行 json,並循環遍歷所有內容,或者編組和解組似乎涉及更多進程,然後只需要實現相對簡單的東西。
編輯:這個結構是一個切片 ([])。
定義一個新結構,它是您現有結構的副本,並帶有不同的標籤:
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"` }
然後,使用這個新結構來編組:
var input ImportedStruct forMarshal:=ImportedStructMarshal(input) ...
只要新結構與導入的結構逐個欄位相容,這就會起作用。
以上是如何從 golang 匯入的套件接收的結構中刪除某些項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!