Argumen Variadik Generik dalam Go
Walaupun Go kekurangan templat dan fungsi terlebih muatan, mencapai beberapa bentuk pengaturcaraan generik untuk fungsi variadik adalah mungkin.
Isu Kod Fungsi Berlebihan
Seperti yang digambarkan dalam coretan kod yang disediakan, banyak fungsi berkongsi logik yang serupa tetapi mengendalikan jenis yang berbeza. Pengulangan ini boleh membawa kepada kod berlebihan.
Penyelesaian: Antara Muka{} Jenis
Satu pendekatan untuk mengurangkan lebihan adalah dengan menggunakan antara muka Go's{} jenis, jenis khas yang serasi dengan semua jenis. Dengan mengubah suai fungsi untuk menerima dan mengembalikan nilai{} antara muka, logik biasa boleh dipusatkan.
<code class="go">func (this Document) Get(name string, defaults ...interface{}) interface{} { v, ok := this.GetValueFromDb(name) if !ok { if len(defaults) >= 1 { return defaults[0] } else { return 0 } } return v }</code>
Kod Pelanggan
Dalam kod klien, fungsi Dapatkan boleh digunakan untuk mendapatkan nilai jenis tertentu:
<code class="go">value := document.Get("index", 1).(int) // Panics if the value is not an int</code>
atau mengendalikan pemeriksaan jenis secara eksplisit:
<code class="go">value, ok := document.Get("index", 1).(int) // ok is false if the value is not an int</code>
Kelemahan dan Alternatif
Semasa pendekatan{} antara muka mengurangkan lebihan kod, ia memperkenalkan overhed masa jalan. Penyelesaian yang lebih baik mungkin melibatkan pemfaktoran semula kod untuk menghapuskan keperluan untuk logik berulang.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mencapai Pengaturcaraan Generik untuk Fungsi Variadik dalam Go Tanpa Templat atau Fungsi Terlebih Beban?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!