Cara Menukar Struct dalam Go: Membenamkan, Menyalin Manual atau Penukaran Eksplisit?

Susan Sarandon
Lepaskan: 2024-10-29 01:40:02
asal
732 orang telah melayarinya

How to Convert a Struct in Go: Embedding, Manual Copying, or Explicit Conversion?

Penukaran Struktur dalam Go

Pertimbangkan dua struct berikut:

type A struct {
    a int
    b string
}

type B struct {
    A
    c string
}
Salin selepas log masuk

Andaikan anda mempunyai pembolehubah jenis A dan ingin menukarnya kepada jenis B. Adakah ini boleh dilakukan dalam Go, atau adakah anda perlu menyalin medan secara manual atau membuat kaedah penukaran eksplisit?

Kaedah 1: Tugasan Struktur Terbenam

Seperti yang anda nyatakan dalam soalan anda, pembenaman boleh digunakan untuk tujuan ini. Dengan membenamkan A dalam B, anda boleh menukar pembolehubah jenis A kepada jenis B hanya dengan memberikannya kepada medan terbenam. Contohnya:

func main() {
    structA := A{a: 42, b: "foo"}
    structB := B{A: structA} // Embed structA into structB
}
Salin selepas log masuk

Pendekatan ini mencipta tika baharu B yang mengandungi data daripada A dalam medan terbenamnya.

Kaedah 2: Penyalinan Medan Manual

Sebagai alternatif, anda boleh menyalin medan dari A ke B secara manual seperti berikut:

func main() {
    structA := A{a: 42, b: "foo"}
    structB := B{
        A: structA, // Copy fields from structA
        c: "bar",
    }
}
Salin selepas log masuk

Kaedah ini melibatkan mencipta tika baharu B dan menetapkan medan daripada A secara manual.

Kaedah 3: Kaedah Penukaran Eksplisit

Pilihan lain ialah mencipta kaedah penukaran eksplisit yang menukar A kepada B. Ini mungkin berguna jika anda mempunyai logik penukaran yang kompleks. Walau bagaimanapun, pendekatan ini tidak diperlukan dalam kes ini, kerana kaedah di atas menyediakan cara yang mudah untuk mencapai penukaran yang diingini.

Atas ialah kandungan terperinci Cara Menukar Struct dalam Go: Membenamkan, Menyalin Manual atau Penukaran Eksplisit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan