Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Terokai penukaran struktur kepada antara muka dalam golang

Terokai penukaran struktur kepada antara muka dalam golang

王林
王林asal
2024-04-07 11:36:02841semak imbas

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
}

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
}

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
}

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
}

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!

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