Golang: Merangkul Komposisi Jenis untuk Pelaksanaan Kaedah Disatukan
Dalam pengaturcaraan berorientasikan objek, kadangkala struct yang berbeza mungkin berkongsi medan atau fungsi yang sama. Untuk mengendalikan senario sedemikian, amalan biasa adalah untuk menentukan antara muka yang kedua-dua struct melaksanakan. Walau bagaimanapun, pendekatan ini memerlukan penentuan kaedah berasingan untuk setiap struct, yang membawa kepada pertindihan kod.
Pendekatan yang lebih cekap ialah memanfaatkan prinsip komposisi jenis. Daripada menggunakan antara muka, kami boleh menentukan jenis tersuai yang mewakili medan kongsi (cth., Versi dalam contoh yang disediakan). Memandangkan jenis tersuai boleh berfungsi sebagai penerima kaedah, kami boleh mencipta kaedah untuk jenis ini dan kemudian membenamkannya dalam kedua-dua struct.
Pertimbangkan pelaksanaan 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 Version } type ERP struct { Name string MRPSupport bool SupportedDatabases []string Version Version }</code>
Kini, kita boleh menggunakan kaedah PrintVersion pada kedua-dua struktur Permainan dan ERP:
<code class="go">func 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>
Pendekatan ini menghapuskan pertindihan kod dan menyediakan cara yang bersatu untuk mencetak versi untuk kedua-dua struct. Selain itu, ia boleh diperluaskan untuk mengendalikan medan atau fungsi biasa yang lain.
Atas ialah kandungan terperinci Bagaimana boleh menaip komposisi kaedah merampingkan pelaksanaan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!