Dalam Go 1.18, pengenalan generik menawarkan potensi untuk pengendalian ralat yang dipertingkatkan. Dengan mencipta jenis 'Sama ada[A,B]', ia menjadi mungkin untuk mewakili nilai yang boleh sama ada daripada jenis A atau B.
Pendekatan ini berbeza daripada simpulan bahasa Go konvensional untuk mengembalikan kedua-dua 'normal ' dan nilai ralat, di mana ralat sifar menunjukkan pulangan yang berjaya. Walau bagaimanapun, ini boleh menjadi masalah apabila tingkah laku yang diingini adalah untuk menyampaikan bahawa nilai sama ada A atau B, bukannya kedua-duanya.
Mengatasi Had Kaedah Antara Muka
Percubaan untuk tentukan Sama ada antara muka dengan parameter jenis untuk kaedah Suis telah tidak berjaya disebabkan oleh sekatan bahawa kaedah antara muka mesti tidak mempunyai parameter jenis. Untuk mengelakkan ini, pendekatan alternatif ialah memperkenalkan konsep Pilihan.
Pilihan dan Mana-mana Jenis
Jenis Pilihan boleh ditakrifkan sebagai antara muka yang mempunyai get() yang sama ada mengembalikan nilai dan ralat sifar, atau ralat jika tiada nilai hadir. Mana-mana jenis kemudiannya boleh ditakrifkan dari segi konsep Pilihan:
type Either[A, B any] interface { is_left() bool is_right() bool find_left() Optional[A] find_right() Optional[B] }
Menggunakan pendekatan ini, Mana-mana jenis boleh dilaksanakan sebagai varian Kiri dan Kanan, yang mewakili kehadiran nilai jenis A atau B, masing-masing.
type Left[A, B any] struct { data A } type Right[A, B any] struct { data B }
Contoh Dunia Sebenar
Yang berikut contoh menunjukkan Mana-mana jenis dalam tindakan:
var e1 Either[int, string] = left[int, string](4143) var e2 Either[int, string] = right[int, string]("G4143") ... if e1.is_left() { if l, err := e1.find_left().get(); err == nil { fmt.Printf("The int is: %d\n", l) } else { fmt.Fprintln(os.Stderr, err) } } ...
Kod ini menangkap dan memproses nilai Either dengan berkesan, menunjukkan cara konsep Optionality menyediakan cara yang fleksibel dan ekspresif untuk mengendalikan ralat atau mewakili nilai pilihan dalam Go.
Atas ialah kandungan terperinci Bagaimanakah Generik Boleh Meningkatkan Pengendalian Ralat dalam Go Menggunakan Sama ada Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!