我从导入的第三方模块的包中收到一个项目:
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中文网其他相关文章!