Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menggunakan parameter dan antara muka kaedah generik untuk memproses kedua-dua kepingan objek Mamalia dan Manusia di Golang?

Bagaimanakah saya boleh menggunakan parameter dan antara muka kaedah generik untuk memproses kedua-dua kepingan objek Mamalia dan Manusia di Golang?

Barbara Streisand
Barbara Streisandasal
2024-10-28 17:36:02585semak imbas

How can I use generic method parameters and interfaces to process both slices of Mammal and Human objects in Golang?

Parameter Kaedah Generik di Golang

Di Golang, untuk membolehkan fungsi menerima sebarang jenis, parameter kaedah generik boleh digunakan. Apabila kaedah memerlukan jenis yang mempunyai sifat tertentu, antara muka boleh digunakan. Di bawah ialah contoh di mana fungsi perlu menerima jenis yang mempunyai sifat ID.

<code class="go">type MammalImpl struct {
    ID   int
    Name string
}

func (m MammalImpl) GetID() int {
    return m.ID
}

func (m MammalImpl) GetName() string {
    return m.Name
}

type HumanImpl struct {
    MammalImpl
    HairColor string
}

func (h HumanImpl) GetHairColor() string {
    return h.HairColor
}</code>

Dalam kod ini, antara muka telah ditakrifkan bersama dengan pelaksanaan terbenamnya untuk Mammal dan Manusia. Ini memastikan kedua-dua jenis boleh digunakan dalam fungsi Count, yang kini mengakses sifat ID secara tidak langsung melalui kaedah GetID.

<code class="go">func Count(ms []Mammal) *[]string {
   IDs := make([]string, len(ms))
   for i, m := range ms {
     IDs[i] = strconv.Itoa(m.GetID())
   }
   return &IDs
}</code>

Dengan menggunakan parameter dan antara muka kaedah generik, fungsi ini kini boleh memproses kedua-dua hirisan objek Mammal dan Manusia.

Berikut ialah kod kerja yang lengkap:

<code class="go">import (
    "fmt"
    "strconv"
)

type Mammal interface {
    GetID() int
    GetName() string
}

type Human interface {
    Mammal

    GetHairColor() string
}

type MammalImpl struct {
    ID   int
    Name string
}

func (m MammalImpl) GetID() int {
    return m.ID
}

func (m MammalImpl) GetName() string {
    return m.Name
}

type HumanImpl struct {
    MammalImpl
    HairColor string
}

func (h HumanImpl) GetHairColor() string {
    return h.HairColor
}

func Count(ms []Mammal) *[]string {
    IDs := make([]string, len(ms))
    for i, m := range ms {
        IDs[i] = strconv.Itoa(m.GetID())
    }
    return &IDs
}

func main() {
    mammals := []Mammal{
        MammalImpl{1, "Carnivorious"},
        MammalImpl{2, "Ominivorious"},
    }

    humans := []Mammal{
        HumanImpl{MammalImpl: MammalImpl{ID: 1, Name: "Peter"}, HairColor: "Black"},
        HumanImpl{MammalImpl: MammalImpl{ID: 2, Name: "Paul"}, HairColor: "Red"},
    }

    numberOfMammalIDs := Count(mammals)
    numberOfHumanIDs := Count(humans)
    fmt.Println(numberOfMammalIDs)
    fmt.Println(numberOfHumanIDs)
}</code>

Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan parameter dan antara muka kaedah generik untuk memproses kedua-dua kepingan objek Mamalia dan Manusia di 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