首頁 > 後端開發 > Golang > 主體

如何從 golang 匯入的套件接收的結構中刪除某些項目?

WBOY
發布: 2024-02-06 08:40:06
轉載
976 人瀏覽過

如何从 golang 中导入的包接收的结构中删除某些项目?

問題內容

我從匯入的第三方模組的套件中收到一個項目:

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中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!