Go Best Practice: Mengurus Fungsi untuk Struktur Serupa dengan Medan Dikongsi
Dalam Go, adalah perkara biasa untuk menghadapi berbilang struct dengan medan yang serupa dan terdapat keperluan untuk melakukan operasi yang sama pada mereka. Untuk mengelakkan pengulangan kod sambil mengekalkan fleksibiliti, pertimbangkan strategi berikut:
Mencipta Jenis Tersuai untuk Medan Dikongsi:
Jika medan kongsi ialah jenis data ringkas ( cth., rentetan), pertimbangkan untuk menentukan jenis tersuai untuknya. Ini membolehkan anda melampirkan kaedah pada jenis tersuai, yang kemudiannya boleh digunakan oleh mana-mana struct yang membenamkan jenis tersebut.
<code class="go">type Version string func (v Version) PrintVersion() { fmt.Println("Version is", v) }</code>
Kemudian, benamkan jenis Versi dalam struct:
<code class="go">type Game struct { Name string MultiplayerSupport bool Genre string Version } type ERP struct { Name string MRPSupport bool SupportedDatabases []string Version }</code>
Ini membolehkan anda mencetak versi menggunakan kaedah PrintVersion pada medan Versi:
<code class="go">g.PrintVersion() e.PrintVersion()</code>
Menggunakan Refleksi:
Jika medan kongsi boleh menjadi jenis yang berbeza atau jika anda mahukan lebih fleksibiliti, anda boleh menggunakan refleksi untuk menggunakan kaedah yang sesuai secara dinamik. Pendekatan ini lebih kompleks dan mempunyai beberapa implikasi prestasi, tetapi ia memberikan fleksibiliti yang lebih besar.
<code class="go">type Printer interface { PrintVersion() error } func PrintVersion(p Printer) error { t := reflect.TypeOf(p) method, ok := t.MethodByName("PrintVersion") if !ok { return fmt.Errorf("object doesn't have a PrintVersion method") } return method.Func.Call([]reflect.Value{reflect.ValueOf(p)})[0].Interface().(error) }</code>
Anda kemudian boleh menggunakan fungsi PrintVersion untuk menggunakan kaedah PrintVersion pada mana-mana objek yang melaksanakan antara muka Pencetak:
<code class="go">var game Game var erp ERP PrintVersion(game) PrintVersion(erp)</code>
Atas ialah kandungan terperinci Bagaimana untuk Menguruskan Fungsi untuk Struktur Go Serupa dengan Medan Dikongsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!