Bagaimanakah Penerima Kaedah dalam Go Boleh Menghapuskan Lebihan Fungsi untuk Struktur Serupa?

Mary-Kate Olsen
Lepaskan: 2024-10-26 14:31:02
asal
940 orang telah melayarinya

How Can Method Receivers in Go Eliminate Function Redundancy for Similar Structs?

Menggunakan Penerima Kaedah Go untuk Mengelakkan Lebihan Fungsi

Dalam Go, adalah perkara biasa untuk menghadapi situasi di mana berbilang struct berkongsi nama medan dan operasi yang serupa. Untuk mengelakkan pengulangan kod semasa mentakrifkan fungsi untuk struct ini, pertimbangkan untuk memanfaatkan penerima kaedah.

Bayangkan anda mempunyai dua struct, Permainan dan ERP, dengan medan yang termasuk Nama dan Versi. Anda ingin mencipta fungsi untuk mencetak pembolehubah Versi untuk setiap struct.

Secara tradisinya, anda perlu mentakrifkan fungsi berasingan untuk Permainan dan ERP:

<code class="go">type Game struct {
    Name string
    MultiplayerSupport bool
    Genre string
    Version string
}

type ERP struct {
    Name string
    MRPSupport bool
    SupportedDatabases []string
    Version string
}

func (g *Game) PrintVersion() {
    fmt.Println("Game Version:", g.Version)
}

func (e *ERP) PrintVersion() {
    fmt.Println("ERP Version:", e.Version)
}</code>
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini memperkenalkan kod pertindihan. Untuk mengatasinya, Go menyediakan penerima kaedah. Begini cara anda boleh melaksanakannya:

<code class="go">type Version string

func (v Version) PrintVersion() {
    fmt.Println("Version:", v)
}

type Game struct {
    Name               string
    MultiplayerSupport bool
    Genre              string
    Version
}

type ERP struct {
    Name               string
    MRPSupport         bool
    SupportedDatabases []string
    Version
}</code>
Salin selepas log masuk

Dengan mentakrifkan jenis Versi dan melaksanakan kaedah PrintVersion untuknya, anda boleh menggunakan semula kaedah ini merentas struct anda melalui gubahan:

<code class="go">func main() {
    g := Game{
        "Fear Effect",
        false,
        "Action-Adventure",
        "1.0.0",
    }

    g.Version.PrintVersion()

    e := ERP{
        "Logo",
        true,
        []string{"ms-sql"},
        "2.0.0",
    }

    e.Version.PrintVersion()
}</code>
Salin selepas log masuk

Ini pendekatan bukan sahaja mengelakkan lebihan fungsi tetapi juga membolehkan anda mengekalkan antara muka yang konsisten untuk mengakses medan Versi merentas berbilang struct.

Atas ialah kandungan terperinci Bagaimanakah Penerima Kaedah dalam Go Boleh Menghapuskan Lebihan Fungsi untuk Struktur Serupa?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!