Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengelakkan Penduaan Kod Apabila Melaksanakan Kaedah Yang Sama pada Structs dengan Medan Dikongsi?

Bagaimana untuk Mengelakkan Penduaan Kod Apabila Melaksanakan Kaedah Yang Sama pada Structs dengan Medan Dikongsi?

DDD
DDDasal
2024-10-27 02:21:30437semak imbas

How to Avoid Code Duplication When Implementing Identical Methods on Structs with Shared Fields?

Amalan Terbaik untuk Menggunakan Fungsi Sepunya Merentasi Struktur dengan Medan Sama

Dalam senario di mana dua struktur mempunyai medan yang sama, adalah wajar untuk mengelakkan pertindihan kod apabila menentukan kaedah yang beroperasi pada medan tersebut.

Jenis Tersuai sebagai Penerima Kaedah

Pendekatan yang disyorkan ialah memperkenalkan jenis tersuai (mis., Versi) yang berfungsi sebagai penerima kaedah. Memandangkan semua jenis tersuai boleh digunakan sebagai penerima kaedah, teknik ini membolehkan penciptaan satu kaedah yang boleh digunakan pada berbilang struct.

Komposisi

Setelah tersuai jenis ditakrifkan, ia boleh dimasukkan ke dalam struct menggunakan komposisi. Ini melibatkan membenamkan jenis tersuai dalam struct, pada asasnya mencipta struktur bersarang.

Contoh

Pertimbangkan coretan kod berikut:

<code class="go">type Version string

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

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

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

Di sini, jenis Versi berfungsi sebagai penerima kaedah, dan kaedah PrintVersionnya boleh diakses oleh kedua-dua struct Permainan dan ERP disebabkan medan Versi terbenamnya.

Penggunaan

Medan Versi terbenam boleh digunakan dan diubah suai sama seperti medan lain:

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

    g.PrintVersion() // Version is 1.0.0

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

    e.PrintVersion() // Version is 2.0.0
}</code>

Dengan menggunakan pendekatan ini, pengulangan kod yang dikaitkan dengan kaedah pendua dihapuskan sambil mengekalkan fleksibiliti dan keselamatan jenis.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Penduaan Kod Apabila Melaksanakan Kaedah Yang Sama pada Structs dengan Medan Dikongsi?. 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