Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Anda Boleh Mencapai Pengaturcaraan Generik dengan Fungsi Variadik dalam Go?
Walaupun Go kekurangan templat atau lebihan fungsi, mencapai beberapa tahap pengaturcaraan generik untuk fungsi variadik adalah mungkin.
Pertimbangkan coretan kod berlebihan berikut:
<code class="go">func (this Document) GetString(name string, defaults ...string) string { v, ok := this.GetValueFromDb(name) if !ok { if len(defaults) >= 1 { return defaults[0] } else { return "" } } return v.asString } func (this Document) GetInt(name string, defaults ...int) int { v, ok := this.GetValueFromDb(name) if !ok { if len(defaults) >= 1 { return defaults[0] } else { return 0 } } return v.asInt }</code>
Untuk menghapuskan lebihan ini, kita boleh menggunakan jenis antara muka{}:
<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 nil } } return v }</code>
Fungsi umum ini kemudiannya boleh digunakan dengan jenis penegasan dalam kod pelanggan:
<code class="go">value := document.Get("index", 1).(int) // Panics if the value is not an int</code>
atau
<code class="go">value, ok := document.Get("index", 1).(int) // `ok` is false if the value is not an int</code>
Walau bagaimanapun, pendekatan ini memperkenalkan overhed masa jalan. Ia mungkin lebih cekap dalam sesetengah kes untuk mengekalkan fungsi yang berasingan dan mempertimbangkan untuk menstruktur semula kod.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mencapai Pengaturcaraan Generik dengan Fungsi Variadik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!