Taip Penegasan dalam Golang untuk Antara Muka Tidak Diketahui
Di Golang, penegasan jenis membolehkan anda menukar antara muka kepada jenis konkrit. Namun, bagaimana jika jenis konkrit tidak diketahui? Artikel ini menyelidiki batasan dan pemahaman yang lebih mendalam tentang penegasan jenis dalam senario sedemikian.
Secara tradisinya, penegasan jenis dilakukan menggunakan borang:
out := reflect.ValueOf(obj).Elem().Interface().(User)
di mana anda menentukan jenis konkrit, seperti sebagai Pengguna dalam kes ini. Ini berfungsi untuk jenis yang diketahui, tetapi bukan untuk jenis yang tidak diketahui.
Dalam fungsi seperti:
func Foo(obj interface{}) bool { // ... }
anda menghadapi cabaran penegasan jenis tanpa mengetahui jenis konkrit.
Masalah timbul kerana penegasan jenis bergantung pada pemeriksaan jenis statik. Pengkompil perlu mengetahui jenis konkrit untuk menjana semakan yang sesuai semasa masa jalan.
Semasa penegasan jenis, pengkompil menyemak sama ada nilai antara muka mempunyai jenis yang sama dengan jenis konkrit yang ditentukan. Jika tidak, ia panik dengan ralat. Semakan masa jalan memastikan bahawa hanya jenis yang serasi ditukar, mengekalkan keselamatan jenis.
Oleh itu, adalah tidak mungkin untuk melakukan penegasan jenis pada antara muka yang tidak diketahui di Golang. Pengkompil memerlukan jenis konkrit untuk melakukan pemeriksaan yang diperlukan dan menjamin keselamatan jenis.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Penegasan Jenis dalam Go Apabila Jenis Konkrit Tidak Diketahui?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!