Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk mengalih keluar item tertentu daripada struktur yang diterima oleh pakej yang diimport dalam golang?

Bagaimana untuk mengalih keluar item tertentu daripada struktur yang diterima oleh pakej yang diimport dalam golang?

WBOY
Lepaskan: 2024-02-06 08:40:06
ke hadapan
1013 orang telah melayarinya

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

Kandungan soalan

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"`
}
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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


Jawapan betul


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"`
}
Salin selepas log masuk

Kemudian, gunakan struktur baharu ini untuk mengawal:

var input ImportedStruct
forMarshal:=ImportedStructMarshal(input)
...
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan