go 반사 획득 유형 대상과 값, go 반사 획득 바늘 이름과 유형, golang 반사 대상의 빈 값 처리, golang 반사 값 대상 수정 변수의 값

1. 반사 획득 유형 대상과 값

package main

import (
	"fmt"
	"reflect"
)

func main() {
     
	a := 36
	atype := reflect.TypeOf(a)
	fmt.Println(atype.Name()) // int
	avalue := reflect.ValueOf(a)
	fmt.Println(avalue.Int()) // 
}

2. 반사 획득 구조체 유형 이름과 유형

package main

import (
	"fmt"
	"reflect"
)

type myobject struct {
     
	Name string
	Sex  int
	Age  int `json:"age"`
}

func main() {
     
	typeof := reflect.TypeOf(myobject{
     })
	fmt.Println(typeof.Name()) //   myobject 
	fmt.Println(typeof.Kind()) //   myobject 
}

3. 반사 획득 포인터 이름과 유형

package main

import (
	"fmt"
	"reflect"
)

type myobject struct {
     
	Name string
	Sex  int
	Age  int `json:"age"`
}

func main() {
     
	typeof := reflect.TypeOf(&myobject{
     })
	fmt.Println(typeof.Elem().Name()) // 
	fmt.Println(typeof.Elem().Kind()) // 
}

4. 반사 획득 구조체 구성원의 유형

package main

import (
	"fmt"
	"reflect"
)

type myobject struct {
     
	Name string
	Sex  int
	Age  int `json:"age"`
}


func main() {
     
	typeof := reflect.TypeOf(myobject{
     })
	fieldnum := typeof.NumField() // 
	for i := 0; i < fieldnum; i++ {
     
		fieldname := typeof.Field(i) // 
		fmt.Println(fieldname)
		name, err := typeofmystruct.FieldByName("Name")// 
		fmt.Println(name, err)
	}

}

5. 반사값 대상은 임의의 값을 얻는다

package main

import (
	"fmt"
	"reflect"
)

func main() {
     
	a := 2020
	valof := reflect.ValueOf(a) // reflect.ValueOf  
	fmt.Println(valof)
	// 
	fmt.Println(valof.Interface()) // interface{}  
	fmt.Println(valof.Int())       // int 
}


참고: .Interface() interface{} 。 , .Int()、.Uint() 、.Floact() 、.Bool() 、.Bytes() 、.String()。

6. 반사로 구조체의 구성원 필드의 값을 얻는다

package main

import (
	"fmt"
	"reflect"
)

type myobject struct {
     
	Name string
	Age  int
}

func main() {
     
	h := myobject{
     " ", 20}
	fmt.Println(h)
	hofvalue := reflect.ValueOf(h)             // reflect.Value 。
	for i := 0; i < hofvalue.NumField(); i++ {
      // 
		// i 
		fmt.Println(hofvalue.Field(i).Interface())
	}
	fmt.Println(hofvalue.Field(1).Type()) // 1 

}

7. 반사 대상의 빈값 처리

package main

import (
	"fmt"
	"reflect"
)

func main() {
     
	var a *int                              // a nil 
	fmt.Println(reflect.ValueOf(a).IsNil()) // nil  true
	// reflect.Value , nil IsValid() false
	fmt.Println(reflect.ValueOf(nil).IsValid())
}

8. 반사값 대상은 변수의 값을 수정한다

package main

import (
	"fmt"
	"reflect"
)

func main() {
     
	// a
	a := 100
	fmt.Printf("a :%p
"
, &a) // a reflect.Value rf := reflect.ValueOf(&a) fmt.Println(" a :", rf) // a rval := rf.Elem() fmt.Println(" a :", rval) // a rval.SetInt(200) fmt.Println(" :", rval.Int()) // fmt.Println(" a :", a) }
:
SetInt(x)  x,  intSetUint(x)  x,  uintSetFloat(x)  x,  float32 float64SetBool(x)  x,  boolSetBytes(x)  x,  []Byte 。
SetString(x)  x,  string

9. 반사 호출 함수 방법

package main

import (
	"fmt"
	"reflect"
)

func myfunc(a, b int) int {
     
	return a + b
}

func main() {
     
	r_func := reflect.ValueOf(myfunc)
	// 
	params := []reflect.Value{
     reflect.ValueOf(10), reflect.ValueOf(20)}
	// 
	res := r_func.Call(params)
	// 
	fmt.Println(res[0].Int())
}

좋은 웹페이지 즐겨찾기