Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Memulakan Struktur Terbenam dengan Cekap dalam Go?

Bagaimanakah Saya Boleh Memulakan Struktur Terbenam dengan Cekap dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-17 01:03:24
asal
701 orang telah melayarinya

How Can I Efficiently Initialize Embedded Structs in Go?

Permulaan Struktur dengan Struktur Terbenam dalam Go

Mengarang struct ialah amalan biasa dalam organisasi kod dan penggunaan semula Go for. Walau bagaimanapun, memulakan struct yang digubah boleh memberikan cabaran apabila subfield diwarisi daripada struct terbenam.

Pertimbangkan contoh berikut:

type Base struct {
    ID string
}

type Child struct {
    Base
    a int
    b int
}
Salin selepas log masuk

Untuk memulakan Child, seseorang mungkin mengharapkan untuk menggunakan yang berikut sintaks:

child := Child{ ID: id, a: a, b: b }
Salin selepas log masuk
Salin selepas log masuk

Walau bagaimanapun, ini akan mengakibatkan ralat kompilasi disebabkan ID medan yang tidak diketahui dalam struct Kanak-kanak literal. Untuk menyelesaikan isu ini, medan ID mesti dimulakan secara berasingan:

child := Child{ a: 23, b: 42 }
child.ID = "foo"
Salin selepas log masuk

Pendekatan ini melanggar prinsip enkapsulasi dengan mendedahkan fakta bahawa ID ialah medan terbenam. Ia juga memperkenalkan risiko memecahkan permulaan jika medan awam dialihkan ke dalam struktur terbenam.

Untuk menangani isu ini, terdapat dua penyelesaian yang disyorkan:

  1. Tersurat Komposit Bersarang:

    Tersurat komposit bersarang boleh digunakan untuk memulakan tertanam medan dalam satu ungkapan:

    child := Child{Base: Base{ID: id}, a: a, b: b}
    Salin selepas log masuk
  2. Cadangan Perubahan dalam Go:

    Go isu 9859 mencadangkan perubahan untuk membuat literal komposit selaras dengan akses medan untuk jenis terbenam. Jika dilaksanakan, perubahan ini akan membenarkan sintaks berikut:

    child := Child{ ID: id, a: a, b: b }
    Salin selepas log masuk
    Salin selepas log masuk

Adalah penting untuk ambil perhatian bahawa jenis terbenam tidak menyediakan enkapsulasi dalam erti kata sebenar. Aplikasi masih boleh mengakses terus child.Base.ID walaupun menggunakan sintaks child.ID.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulakan Struktur Terbenam dengan Cekap dalam Go?. 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