Apabila bekerja dengan antara muka dalam Go, kadangkala ia mungkin perlu untuk menentukan jenis nilai asas. Di sinilah pakej mencerminkan memainkan peranan. Fungsi reflect.TypeOf() boleh digunakan untuk mendapatkan jenis nilai antara muka. Walau bagaimanapun, penegasan jenis memerlukan jenis tertentu, bukan hanya objek Jenis.
Dalam kod yang disediakan, percubaan dibuat untuk melaksanakan penegasan jenis pada hasil reflect.TypeOf( i):
item2 := i.(reflect.TypeOf(i)) // reflect.TypeOf(i) is not a type
Baris ini akan gagal kerana reflect.TypeOf(i) mengembalikan objek Type, bukan jenis tertentu yang boleh digunakan untuk penegasan jenis.
Terdapat beberapa cara untuk mendekati senario ini. Satu pilihan ialah menggunakan suis jenis pada nilai antara muka itu sendiri, seperti yang dicadangkan dalam jawapan:
switch x.(type){ case int: dosomething() }
Pendekatan ini menyemak jenis nilai yang disimpan dalam antara muka dan melakukan tindakan sewajarnya. Ia tidak memerlukan refleksi jenis.
Sebagai alternatif, jika anda secara khusus perlu mengakses dan menghidupkan jenis atribut dalam antara muka, anda boleh menggunakan pendekatan berikut:
s := reflect.ValueOf(x) for i:=0; i<s.NumValues; i++{ switch s.Field(i).Interface().(type){ case int: dosomething() } }
Ini melibatkan mengulangi medan antara muka, mendapatkan nilainya dan melakukan semakan jenis pada nilai tersebut.
Walaupun pendekatan ini tidak begitu ringkas kerana menggunakan suis jenis pada nilai antara muka itu sendiri, ia membolehkan lebih fleksibiliti dalam mengendalikan pelbagai jenis atribut dalam antara muka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Penegasan Jenis Menggunakan `reflect.TypeOf()` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!