Jenis Penegasan dengan Pembolehubah Jenis Fungsi
Soalan ini bertujuan untuk memahami cara melaksanakan penegasan jenis dengan menghantar pembolehubah jenis ke dalam fungsi. Matlamatnya adalah untuk mencapai sesuatu seperti berikut:
// Pseudocode func myfunction(mystring string, mytype Type) { ... someInterface := translate(mystring) object, ok := someInterface.(mytype) ... // Do other stuff } func main() { // Desired function call myfunction("hello world", map[string]string) }
Pengisytiharan Fungsi yang Betul untuk Penegasan Jenis
Untuk melaksanakan penegasan jenis dalam fungsi yang diberikan, pengisytiharan fungsi yang betul harus menggunakan antara muka{} untuk parameter jenis. Ini kerana antara muka dalam Go boleh menyimpan sebarang nilai jenis. Berikut ialah versi perisytiharan fungsi yang diperbetulkan:
func myfunction(v interface{}, expectedType interface{}) bool { return reflect.TypeOf(v) == reflect.TypeOf(expectedType) }
Penggunaan dalam Fungsi Utama
Dalam fungsi utama, myfunction boleh dipanggil dengan menghantar sampel nilai jenis yang diingini dan bukannya jenis itu sendiri:
assertNoMatch := myfunction("hello world", map[string]string{}) assertMatch := myfunction("hello world", "stringSample") fmt.Printf("%+v\n", assertNoMatch) // false fmt.Printf("%+v\n", assertMatch) // true
Pendekatan Dijelaskan
Pendekatan menggunakan pakej reflect untuk membandingkan jenis nilai sebenar (v ) dengan nilai sampel jenis yang dijangkakan (expectedType). Ini membolehkan kami melakukan semakan jenis dinamik, sama seperti kami menggunakan pernyataan suis untuk menyemak jenis rentetan saya dan menghantarnya kepada jenis yang diingini secara eksplisit.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Penegasan Jenis dengan Pembolehubah Jenis Fungsi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!