Saya belum menemukan sumber yang bagus untuk menggunakan interface{}
tipe. Sebagai contoh
package main
import "fmt"
func weirdFunc(i int) interface{} {
if i == 0 {
return "zero"
}
return i
}
func main() {
var i = 5
var w = weirdFunc(5)
// this example works!
if tmp, ok := w.(int); ok {
i += tmp
}
fmt.Println("i =", i)
}
Apakah Anda mengetahui pengenalan yang baik untuk menggunakan Go interface{}
?
pertanyaan spesifik:
- bagaimana cara mendapatkan Tipe w yang "asli"?
- apakah ada cara untuk mendapatkan representasi string dari suatu tipe?
- apakah ada cara untuk menggunakan representasi string dari suatu tipe untuk mengonversi nilai?
types
type-conversion
go
cc muda
sumber
sumber
reflect.TypeOf
.Anda juga dapat melakukan sakelar tipe:
sumber
Anda dapat menggunakan refleksi (
reflect.TypeOf()
) untuk mendapatkan jenis sesuatu, dan nilai yang diberikannya (Type
) memiliki representasi string (String
metode) yang dapat Anda cetak.sumber
fmt
format "% T" daripada langsung menggunakanreflect
.Berikut adalah contoh decoding peta generik menggunakan switch dan refleksi, jadi jika Anda tidak cocok dengan tipenya, gunakan refleksi untuk mencari tahu dan kemudian tambahkan tipe di lain waktu.
sumber
Sakelar tipe juga dapat digunakan dengan benda refleksi:
sumber
Saya akan menawarkan cara untuk mengembalikan boolean berdasarkan menyampaikan argumen Jenis refleksi ke penerima tipe lokal (karena saya tidak dapat menemukan yang seperti ini).
Pertama, kami mendeklarasikan tipe anonim kami dari tipe reflect. Nilai:
Kemudian kami menambahkan pembangun untuk tipe lokal AnonymousType kami yang dapat menerima tipe potensial apa pun (sebagai antarmuka):
Kemudian kami menambahkan fungsi untuk struct AnonymousType kami yang menegaskan terhadap sebuah reflect.
Ini memungkinkan kami untuk memanggil yang berikut:
Dapat melihat versi yang lebih lama dan berfungsi di sini: https://play.golang.org/p/EIAp0z62B7
sumber
Ada beberapa cara untuk mendapatkan representasi string dari suatu tipe. Sakelar juga dapat digunakan dengan jenis pengguna:
Tautan ke taman bermain: https://play.golang.org/p/VDeNDUd9uK6
sumber