Dalam Go, adalah perkara biasa untuk bekerja dengan antara muka untuk mengendalikan jenis dengan gelagat dikongsi. Walau bagaimanapun, kerap menyemak jenis nilai antara muka menggunakan penegasan jenis boleh menjadi membosankan. Ini menimbulkan persoalan:
Sebagai contoh, pertimbangkan fungsi yang mengambil antara muka:
func method(data interface{})
Untuk mengakses medan atau kaedah jenis konkrit, seseorang biasanya menggunakan penegasan jenis:
switch data.(type) { case *Struct1: a := data.(*Struct1) // ... case *Struct2: a := data.(*Struct2) // ... }
Walau bagaimanapun, sistem penaipan statik Go menghalang penciptaan pembolehubah dengan jenis tertentu pada masa jalan.
Fungsi Abstrak:
Daripada bergantung pada penegasan jenis, buat antara muka yang mentakrifkan fungsi yang diperlukan. Kemudian, minta jenis konkrit melaksanakan antara muka ini. Tetapkan nilai antara muka kepada pembolehubah jenis ini, menghapuskan keperluan untuk penegasan jenis.
Menggunakan Refleksi:
Dalam kes di mana abstraksi tidak boleh dilakukan, refleksi boleh digunakan untuk mengakses medan biasa dengan nama mereka. Walaupun penyelesaian ini membenarkan pengendalian jenis dinamik, ia tidak mempunyai jaminan masa penyusunan dan mungkin mempunyai implikasi prestasi.
Atas ialah kandungan terperinci Bolehkah Anda Mengelakkan Jenis Penegasan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!