reflect.TypeOf().numField()和reflect.ValueOf().numField()有什麼區別?

chenqinghe發表於2016-10-24
type People struct {
    Name string
    Age  int
    Addr string
}

func main() {
    p := people{Name: "aaa"}
    v := reflect.ValueOf(p)
    t := reflect.TypeOf(p)
    fmt.Println(v.NumField(), t.NumField())    // 3  3

}

這裡列印出來的值都是 3,新增或者刪除 People 的 field 這兩個值都是一樣的,難道這兩個的作用一模一樣嗎。 看了下原始碼

// NumField returns the number of fields in the struct v.
// It panics if v's Kind is not Struct.
func (v Value) NumField() int {
    v.mustBe(Struct)
    tt := (*structType)(unsafe.Pointer(v.typ))
    return len(tt.fields)
}

// NumField returns a struct type's field count.
// It panics if the type's Kind is not Struct.
NumField() int

英文不好,但感覺這兩者還是有區別的,並且也沒有說明這兩者作用一樣,求解答。

更多原創文章乾貨分享,請關注公眾號
  • reflect.TypeOf().numField()和reflect.ValueOf().numField()有什麼區別?
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章