粗略的看了一下代码,使用了反射, 在go中反射是非常消耗性能与相对于而言会比较慢的, 第一个原因是用于反射的reflect.Type信息需要动态生成。当我们使用Golang反射机制时,编译器需要动态生成一些辅助结构体来保存调用时的上下文信息。这些结构体中的字段数量与复杂度都取决于反射的使用情况。因此,如果我们在编写代码时经常使用反射,那么编译器将需要频繁地动态生成这些结构体,这会导致编译时间的增加和程序执行速度的降低。 第二个原因是反射使用了接口。在Golang中,所有类型(包括基础类型和结构体)都是通过接口实现的。在反射时,我们需要将类型和值转换为对应的接口类型。这种转换需要额外的时间和空间开销,而且机器码也需要额外的指令来完成类型转换。 在go中会尽量避免使用反射来实现某些功能,当然如果开发性价比不错,用反射也没问题 package main import ( "encoding/json" "fmt" ) type MyStruct struct { First string `json:"first"` Last string `json:"last"` Age int `json:"age"` Nets []string `json:"nets"` Submap Submap `json:"submap"` } type Submap struct { Subfirst string `json:"subfirst"` Sublast []string `json:"sublast"` Subsub Subsub `json:"subsub"` } type Subsub struct { Subsub []string `json:"subsub"` } func main() { jsonData := ` { "first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "value1", "value2"], "submap": { "subfirst": "Dale", "sublast": ["Murphy", "value3", "value4"], "subsub":{"subsub":["value5","value6","value7","value8","value9"]} } }` var data MyStruct err := json.Unmarshal([]byte(jsonData), &data) if err != nil { fmt.Println("Error:", err) return } // Accessing the flattened structure fmt.Println("First:", data.First) fmt.Println("Last:", data.Last) fmt.Println("Age:", data.Age) fmt.Println("Nets:", data.Nets) fmt.Println("Subfirst:", data.Submap.Subfirst) fmt.Println("Sublast:", data.Submap.Sublast) fmt.Println("Subsub:", data.Submap.Subsub.Subsub) }