Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Menukar Struct dalam Go: Membenamkan, Menyalin Manual atau Penukaran Eksplisit?

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

Susan Sarandon
Susan Sarandonasal
2024-10-29 01:40:02666semak imbas

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
}

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
}

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",
    }
}

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!

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