Terokai penukaran struktur kepada antara muka dalam golang

王林
Lepaskan: 2024-04-07 11:36:02
asal
864 orang telah melayarinya

Terdapat dua kaedah untuk menukar struktur kepada antara muka: membenamkan struktur atau menggunakan corak penyesuai. Pembenaman ialah pendekatan yang lebih langsung yang mencipta jenis baharu dengan medan struktur dan kaedah antara muka. Corak Penyesuai menggunakan jenis perantaraan yang mengandungi contoh struktur dan melaksanakan antara muka. Antara muka yang ditukar hanya mengandungi kaedah antara muka dan tidak mengandungi medan lain struktur. Kedua-dua kaedah boleh digunakan untuk mencapai kebolehgunaan semula kod berorientasikan objek dan memberikan fleksibiliti dalam menggunakan antara muka yang berbeza dalam sistem.

Terokai penukaran struktur kepada antara muka dalam golang

Penukaran daripada struktur kepada antara muka dalam bahasa Go

Apakah itu struktur dan antara muka?

  • Struktur ialah jenis data yang mengandungi koleksi data yang berkaitan, dan setiap item data dipanggil medan.
  • Antaramuka ialah jenis abstrak yang mentakrifkan koleksi kaedah Mana-mana jenis yang melaksanakan kaedah ini boleh melaksanakan antara muka.

Struktur kepada penukaran antara muka

1.Membenamkan

Cara paling mudah ialah membenamkan struktur ke dalam antara muka. Ini mencipta jenis baharu yang mempunyai kedua-dua medan struktur dan kaedah antara muka.

type Person struct {
    Name string
    Age  int
}

type Personer interface {
    GetName() string
}

// 嵌入 Person 到 Personer 4
type EmbeddedPerson struct {
    Person
}

func (p EmbeddedPerson) GetName() string {
    return p.Name
}
Salin selepas log masuk

2. Corak Penyesuai

Pendekatan lain ialah menggunakan corak penyesuai, mencipta jenis baharu yang mengandungi contoh struktur dan melaksanakan antara muka.

type Personer interface {
    GetName() string
}

type Person struct {
    Name string
    Age  int
}

// PersonAdapter 适配器
type PersonAdapter struct {
    p *Person
}

func (a *PersonAdapter) GetName() string {
    return a.p.Name
}

func main() {
    p := Person{"John", 30}
    pa := &PersonAdapter{&p}
    fmt.Println(pa.GetName()) // 输出:John
}
Salin selepas log masuk

Nota:

  • Medan struktur mestilah terbuka supaya kaedah antara muka boleh mengaksesnya.
  • Jenis antara muka yang ditukar hanya mengandungi kaedah antara muka dan tidak termasuk medan lain dalam struktur.

Contoh Praktikal

Andaikan kita mempunyai User 结构体,它包含姓名和电子邮件。我们要创建一个接口 Userer supaya kita boleh mencari pengguna berdasarkan nama atau e-mel mereka.

Gunakan benam:

type User struct {
    Name string
    Email string
}

type Userer interface {
    GetName() string
    GetEmail() string
}

type EmbeddedUser struct {
    User
}

func (u EmbeddedUser) GetName() string {
    return u.Name
}

func (u EmbeddedUser) GetEmail() string {
    return u.Email
}
Salin selepas log masuk

Gunakan mod penyesuai:

type Userer interface {
    GetName() string
    GetEmail() string
}

type User struct {
    Name  string
    Email string
}

type UserAdapter struct {
    user *User
}

func (ua *UserAdapter) GetName() string {
    return ua.user.Name
}

func (ua *UserAdapter) GetEmail() string {
    return ua.user.Email
}

func main() {
    user := User{"John", "john@example.com"}
    userAdapter := &UserAdapter{&user}
    fmt.Println(userAdapter.GetName())  // 输出:John
    fmt.Println(userAdapter.GetEmail()) // 输出:john@example.com
}
Salin selepas log masuk

Atas ialah kandungan terperinci Terokai penukaran struktur kepada antara muka dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!