Rumah >pembangunan bahagian belakang >Golang >Patutkah Anda Menggunakan Struktur Terbenam untuk Menentukan Data dalam Antara Muka Go?

Patutkah Anda Menggunakan Struktur Terbenam untuk Menentukan Data dalam Antara Muka Go?

Barbara Streisand
Barbara Streisandasal
2024-12-15 13:34:10870semak imbas

Should You Use Embedded Structs to Define Data in Go Interfaces?

Medan Antara Muka Go: Untuk Digunakan atau Tidak Untuk Digunakan?

Dalam Go, antara muka biasanya digunakan untuk menentukan kefungsian dan bukannya data. Ini bermakna walaupun anda boleh menentukan kaedah dalam antara muka, anda tidak boleh menentukan sebarang medan yang diperlukan dalam pelaksanaan.

Walau bagaimanapun, menggunakan struct terbenam, adalah mungkin untuk mencipta antara muka yang mentakrifkan data secara berkesan dengan mendedahkannya melalui kaedah.

Contoh:

Pertimbangkan perkara berikut contoh:

type PersonProvider interface {
    GetPerson() *Person
}

type Person struct {
    Name string
    Age  int64
}

func (p *Person) GetPerson() *Person {
    return p
}

type Bob struct {
    FavoriteNumber int64
    Person
}

Dalam contoh ini, antara muka PersonProvider mentakrifkan kaedah yang mengembalikan penuding kepada objek Person. Struktur Orang mengandungi medan data Nama dan Umur. Struk Bob membenamkan struct Orang, dengan berkesan mewarisi medannya.

Fungsi Berinteraksi dengan Data:

Fungsi boleh berinteraksi dengan data terbenam melalui kaedah GetPerson():

func SayHi(pp PersonProvider) {
    fmt.Printf("Hello, %v!\r", pp.GetPerson().Name)
}

func main() {
    b := &Bob{
        5,
        Person{"Bob", 23},
    }
    SayHi(b)
    fmt.Printf("You're %v years old now!", b.Age)
}

Perbincangan:

Teknik ini membenarkan antara muka yang mentakrifkan data sebaliknya daripada tingkah laku. Ia menyediakan peningkatan fleksibiliti dengan membenarkan struct untuk melaksanakan antara muka tanpa mendedahkan medan konkrit mereka. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pendedahan penunjuk masih memberikan akses terus kepada data, menawarkan fleksibiliti tambahan yang terhad.

Selain itu, konvensyen Go tidak selalu memerlukan penggunaan abstraksi untuk akses data. Dalam kebanyakan kes, mendedahkan atribut data melalui pembenaman atau medan awam boleh diterima. Apabila mempertimbangkan teknik ini, adalah disyorkan untuk menilai berdasarkan kes demi kes sama ada ia memberikan faedah yang ketara berbanding mendedahkan atribut secara langsung. Jika mendedahkan data melalui getter dan setter tidak penting untuk fleksibiliti masa depan atau keserasian API, atribut awam mungkin penyelesaian yang lebih mudah.

Secara keseluruhannya, walaupun teknik yang dibentangkan adalah helah yang bijak, anda dinasihatkan untuk mempertimbangkan keperluan untuk itu berhati-hati dan pertimbangkan pendekatan alternatif yang mungkin lebih sesuai dalam beberapa konteks.

Atas ialah kandungan terperinci Patutkah Anda Menggunakan Struktur Terbenam untuk Menentukan Data dalam Antara Muka Go?. 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