Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memindahkan Data dengan Cekap Antara Go Structs dengan Ahli Yang Sama tetapi Berbeza Jenis?

Bagaimanakah Saya Boleh Memindahkan Data dengan Cekap Antara Go Structs dengan Ahli Yang Sama tetapi Berbeza Jenis?

Patricia Arquette
Patricia Arquetteasal
2024-12-10 02:18:13471semak imbas

How Can I Efficiently Transfer Data Between Go Structs with Identical Members but Different Types?

Salin Struktur dengan Ahli Yang Sama dan Jenis Varian

Dalam Go, bukan sesuatu yang luar biasa untuk mempunyai struct dengan ahli yang sama tetapi jenis yang berbeza. Pertimbangkan contoh berikut:

type Common struct {
    Gender int
    From   string
    To     string
}

type Foo struct {
    Id    string
    Name  string
    Extra Common
}

type Bar struct {
    Id    string
    Name  string
    Extra Common
}

Memandangkan contoh Foo dan Bar, bagaimanakah kita boleh memindahkan data dari satu ke yang lain?

Penyelesaian: Penukaran

Memandangkan jenis asas Foo dan Bar adalah sama selain daripada teg struct, Go menawarkan penyelesaian yang mudah: penukaran. Dengan menukar nilai Foo kepada Bar taip, kami menimpa data sedia ada dalam Bar dengan berkesan. Berikut ialah kodnya:

foo := Foo{Id: "123", Name: "Joe"}
bar := Bar(foo)

Contoh

Mari kita uji penukaran dalam contoh taman permainan: https://go.dev/play/p/1W3EXQVXVhS.

Batasan

Perlu diperhatikan bahawa penukaran hanya berfungsi apabila jenis asas adalah sama kecuali struct tag. Jika jenis asas berbeza dengan ketara, mencipta fungsi salinan khusus akan diperlukan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memindahkan Data dengan Cekap Antara Go Structs dengan Ahli Yang Sama tetapi Berbeza Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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