Bagaimana cara menemukan jenis objek di Go? Dalam Python, saya hanya menggunakan typeof
untuk mengambil jenis objek. Demikian pula dalam Go, apakah ada cara untuk menerapkan hal yang sama?
Ini adalah wadah tempat saya melakukan iterasi:
for e := dlist.Front(); e != nil; e = e.Next() {
lines := e.Value
fmt.Printf(reflect.TypeOf(lines))
}
Saya tidak bisa mendapatkan jenis garis objek dalam hal ini yang merupakan array dari string.
go
go-reflect
Rahul
sumber
sumber
fmt.Printf("%T\n", var)
Jawaban:
Paket refleksi Go memiliki metode untuk memeriksa jenis variabel.
Cuplikan berikut akan mencetak jenis pantulan string, integer, dan float.
Keluaran:
lihat: http://play.golang.org/p/XQMcUVsOja untuk melihatnya dalam aksi.
Dokumentasi lebih lanjut di sini: http://golang.org/pkg/reflect/#Type
sumber
Saya menemukan 3 cara untuk mengembalikan tipe variabel saat runtime:
Menggunakan pemformatan string
Menggunakan paket refleksi
Menggunakan pernyataan tipe
Setiap metode memiliki kasus penggunaan terbaik yang berbeda:
pemformatan string - jejak pendek dan rendah (tidak perlu mengimpor paket mencerminkan)
mencerminkan paket - ketika membutuhkan detail lebih lanjut tentang jenis kami memiliki akses ke kemampuan refleksi penuh
jenis pernyataan - memungkinkan jenis pengelompokan, misalnya mengenali semua tipe int32, int64, uint32, uint64 sebagai "int"
sumber
t
, jadit := v.(type)
menjadiv.(type)
, dan_ = t
tidak lagi diperlukan.case 'T': p.fmt.fmtS(reflect.TypeOf(arg).String())
. Paket fmt menggunakan mencerminkan untuk mencetak jenisGunakan paket mencerminkan :
Menghasilkan:
Tempat bermain
Contoh menggunakan
ValueOf(i interface{}).Kind()
:Menghasilkan:
Tempat bermain
sumber
if reflect.TypeOf(err) == string
?Untuk mendapatkan representasi string:
Dari http://golang.org/pkg/fmt/
Output:
sumber
Saya akan menjauh dari pantulan. paket. Alih-alih gunakan% T
sumber
Cara terbaik adalah menggunakan konsep refleksi di Google.
reflect.TypeOf
memberikan tipe bersamaan dengan nama paketreflect.TypeOf().Kind()
memberikan tipe garis bawahsumber
Untuk menjadi singkat, silakan gunakan
fmt.Printf("%T", var1)
atau varian lainnya dalam paket fmt.sumber
Anda dapat memeriksa jenis variabel / instance saat runtime baik menggunakan
TypeOf
fungsi paket "mencerminkan" atau dengan menggunakanfmt.Printf()
:sumber
Untuk mendapatkan jenis bidang dalam struct
Keluaran
Lihat di IDE https://play.golang.org/p/bwIpYnBQiE
sumber
Anda dapat menggunakan
reflect.TypeOf
.int
,string
): ia akan kembali namanya (misalnya:int
,string
)<package name>.<struct name>
(misalnya:main.test
)sumber
Jika kita memiliki variabel ini:
sumber
Anda dapat menggunakan:
interface{}..(type)
seperti di taman bermain inisumber
paket mencerminkan datang untuk menyelamatkan:
Lihat demo ini
sumber
Anda bisa menggunakan metode fmt package fmt.Printf (), informasi lebih lanjut: https://golang.org/pkg/fmt/
contoh: https://play.golang.org/p/aJG5MOxjBJD
sumber