Apakah bahasa Go memiliki kelebihan fungsi / metode?


127

Saya memindahkan pustaka C ke Go. Fungsi AC (dengan varargs) didefinisikan seperti ini:

curl_easy_setopt(CURL *curl, CURLoption option, ...); 

Jadi saya membuat fungsi pembungkus C:

curl_wrapper_easy_setopt_str(CURL *curl, CURLoption option, char* param);
curl_wrapper_easy_setopt_long(CURL *curl, CURLoption option, long param);

Jika saya mendefinisikan fungsi di Go seperti ini:

func (e *Easy)SetOption(option Option, param string) {
    e.code = Code(C.curl_wrapper_easy_setopt_str(e.curl, C.CURLoption(option), C.CString(param)))
}

func (e *Easy)SetOption(option Option, param long) {
    e.code = Code(C.curl_wrapper_easy_setopt_long(e.curl, C.CURLoption(option), C.long(param)))
}

Kompiler Go mengeluh:

*Easy·SetOption redeclared in this block

Jadi apakah Go mendukung fungsi (metode) kelebihan beban, atau apakah kesalahan ini berarti sesuatu yang lain?

Jawaban:


165

Tidak.

Lihat FAQ Go Language , dan khususnya bagian tentang overloading .

Pengiriman metode disederhanakan jika tidak perlu melakukan pencocokan jenis juga. Pengalaman dengan bahasa lain memberi tahu kami bahwa memiliki berbagai metode dengan nama yang sama tetapi tanda tangan yang berbeda terkadang berguna tetapi juga bisa membingungkan dan rapuh dalam praktiknya. Mencocokkan hanya dengan nama dan membutuhkan konsistensi dalam tipe adalah keputusan penyederhanaan utama dalam sistem tipe Go.

Perbarui: 2016-04-07

Meskipun Go masih tidak memiliki fungsi yang kelebihan beban (dan mungkin tidak akan pernah), fitur yang paling berguna dari beban berlebih, yaitu memanggil fungsi dengan argumen opsional dan menyimpulkan default untuk fungsi yang dihilangkan dapat disimulasikan menggunakan fungsi variadic, yang telah ditambahkan sejak saat itu. Tapi ini terjadi karena hilangnya pengecekan tipe.

Misalnya: http://changelog.ca/log/2015/01/30/golang



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.