Kuasai seni mendapatkan maklumat jenis dalam Go
Fahami seni mendapatkan maklumat jenis dalam bahasa Go: gunakan fungsi reflect.TypeOf() untuk mendapatkan objek jenis untuk mendapatkan data terperinci tentang jenis tersebut. Gunakan penegasan jenis untuk memaksa nilai antara muka ditukar kepada jenis tertentu dan mengembalikan nilai jenis itu jika penukaran berjaya. Gunakan pakej pengekodan/json untuk mengekod dan menyahkod nilai ke dalam rentetan JSON sambil mengekalkan maklumat jenis. Contoh praktikal menunjukkan cara menggunakan maklumat jenis untuk penukaran jenis dinamik dan penyahkodan JSON tersuai.
Kuasai seni mendapatkan maklumat jenis dalam Go
Dalam bahasa Go, mendapatkan maklumat jenis ialah alat berkuasa yang membolehkan pembangun memeriksa dan memproses pelbagai jenis data pada masa jalan. Artikel ini akan meneroka pelbagai kaedah untuk mendapatkan maklumat jenis dan memberikan contoh praktikal untuk menunjukkan aplikasinya.
Gunakan fungsi reflect.TypeOf()
reflect.TypeOf()
reflect.TypeOf()
函数是最常用的获取类型信息的方法。它返回一个 reflect.Type
类型的对象,包含有关类型的丰富信息。
package main import "reflect" func main() { var x int = 42 t := reflect.TypeOf(x) fmt.Println(t.Kind()) // 输出:int }
使用 type assertion
Type assertion 是获取类型信息的另一种方法。它将一个接口值强制转换为特定类型,如果转换成功则返回该类型的值,否则返回 nil
。
package main func main() { var x interface{} = 42 if i, ok := x.(int); ok { fmt.Println(i) // 输出:42 } }
使用 encoding/json
encoding/json
包提供了编解码类型信息的方法。json.MarshalIndent()
reflect.TypeOf()
ialah kaedah yang paling biasa digunakan untuk mendapatkan maklumat jenis. Ia mengembalikan objek jenis reflect.Type
yang mengandungi maklumat yang kaya tentang jenis tersebut. package main
import "encoding/json"
func main() {
type Person struct {
Name string
Age int
}
p := Person{Name: "John", Age: 30}
b, err := json.MarshalIndent(p, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(b)) // 输出:{
// "Name": "John",
// "Age": 30
// }
}
Salin selepas log masuk
Menggunakan package main import "encoding/json" func main() { type Person struct { Name string Age int } p := Person{Name: "John", Age: 30} b, err := json.MarshalIndent(p, "", " ") if err != nil { log.Fatal(err) } fmt.Println(string(b)) // 输出:{ // "Name": "John", // "Age": 30 // } }
Penegasan jenis ialah cara lain untuk mendapatkan maklumat jenis. Ia memaksa nilai antara muka kepada jenis tertentu dan mengembalikan nilai jenis itu jika penukaran berjaya, jika tidak nihil
dikembalikan.
package main import "reflect" func main() { var x interface{} = 42 switch t := reflect.TypeOf(x); t.Kind() { case reflect.Int: fmt.Println("x is an int") case reflect.String: fmt.Println("x is a string") default: fmt.Println("x is an unknown type") } }
pengekodan/json
Pakej pengekodan/json
menyediakan kaedah untuk pengekodan dan maklumat jenis penyahkodan. Fungsi json.MarshalIndent()
mengekod dan menyahkod nilai ke dalam rentetan JSON sambil mengekalkan maklumat jenis. package main import ( "encoding/json" "fmt" "reflect" ) type Person struct { Name string Age int } func CustomUnmarshal(data []byte) (Person, error) { var p Person t := reflect.TypeOf(p) dec := json.NewDecoder(bytes.NewReader(data)) dec.UseNumber() // 忽略 JSON 数字作为浮点数 for { var key string if err := dec.Decode(&key); err != nil { return p, err } if key == "" { break } var val interface{} if field, ok := reflect.TypeOf(p).FieldByName(key); ok { val = reflect.New(field.Type).Interface() } else { val = map[string]interface{}{} } if err := dec.Decode(&val); err != nil { return p, err } reflect.ValueOf(&p).Elem().FieldByName(key).Set(reflect.ValueOf(val)) } return p, nil } func main() { data := []byte(`{ "Name": "John", "Age": 30, "Hobbies": ["running", "swimming"] }`) p, err := CustomUnmarshal(data) if err != nil { log.Fatal(err) } fmt.Println(p) // 输出:{John 30} }
Kes 1: Penukaran jenis dinamik
Memperoleh maklumat jenis boleh mencapai penukaran jenis dinamik dan melakukan operasi yang berbeza mengikut jenis yang berbeza. 🎜rrreee🎜🎜Kes 2: Penyahkodan tersuai🎜🎜🎜Untuk mendapatkan maklumat jenis, anda juga boleh menyesuaikan penyahkod JSON untuk menyahkod struktur JSON yang berbeza berdasarkan nama jenis tertentu. 🎜rrreee🎜Dengan mendapatkan maklumat jenis, pembangun boleh mendapatkan cerapan tentang jenis data dalam program Go dan mencipta kod yang fleksibel dan berskala. 🎜Atas ialah kandungan terperinci Kuasai seni mendapatkan maklumat jenis dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Apabila menggunakan SQL.Open, mengapa DSN tidak melaporkan ralat? Dalam bahasa Go, sql.open ...
