Ketiadaan keupayaan generik Go menimbulkan cabaran apabila cuba menyamaratakan fungsi. Senario biasa ialah keperluan untuk fungsi pengendalian ralat generik yang digunakan untuk mana-mana fungsi yang mengembalikan nilai dan ralat.
Contoh yang disediakan menunjukkan percubaan untuk mencipta fungsi sedemikian menggunakan antara muka kosong:
<code class="go">func P(any interface{}, err error) (interface{}) { if err != nil { panic("error: "+ err.Error()) } return any }</code>
Sementara pendekatan ini berfungsi untuk pengendalian ralat, ia kehilangan maklumat jenis, meninggalkan antara muka yang terhasil kosong.
Untuk mengelakkan isu kehilangan maklumat jenis, pertimbangkan untuk menggunakan penjanaan kod untuk mencipta pelaksanaan khusus fungsi pengendalian ralat untuk jenis yang berbeza. Ini boleh dicapai menggunakan alatan seperti "go generate", "gengen", "genny" atau "gen".
Sebagai contoh, menggunakan "gen", anda boleh menentukan templat:
<code class="text">// template.go package main import "fmt" func P[T any](v T, err error) (T) { if err != nil { panic(fmt.Sprintf("error: %v", err)) } return v }</code>
Templat ini boleh digunakan untuk menjana pelaksanaan jenis khusus bagi P():
<code class="sh">gen generate</code>
Ini akan mewujudkan pelaksanaan seperti sebagai:
<code class="go">// p_int.go package main func PInt(v int, err error) (int) { if err != nil { panic(fmt.Sprintf("error: %v", err)) } return v }</code>
Dengan menggunakan fungsi yang dijana ini, maklumat jenis dikekalkan dan pengendalian ralat boleh digunakan pada jenis tertentu dengan lancar.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengendalian Ralat Generik dalam Go Without Generics?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!