Sem descrição

Tao Wen 58ce5d9ea2 add README há 7 anos atrás
test15 5db70aa4d6 gofmt há 7 anos atrás
tests 5db70aa4d6 gofmt há 7 anos atrás
.gitignore b3b30f3fbe fix all tests há 7 anos atrás
.travis.yml 1cef955fc2 add ci and badge há 7 anos atrás
Gopkg.lock 1df9eeb2bb add dependency declaration há 7 anos atrás
Gopkg.toml 1df9eeb2bb add dependency declaration há 7 anos atrás
LICENSE 04bfe0d094 Initial commit há 7 anos atrás
README.md 58ce5d9ea2 add README há 7 anos atrás
go_above_17.go 3fc4794c80 import from plz há 7 anos atrás
go_above_19.go 3fc4794c80 import from plz há 7 anos atrás
go_below_17.go 5db70aa4d6 gofmt há 7 anos atrás
go_below_19.go 3fc4794c80 import from plz há 7 anos atrás
reflect2.go 58ce5d9ea2 add README há 7 anos atrás
reflect2_amd64.s 3fc4794c80 import from plz há 7 anos atrás
reflect2_kind.go 5db70aa4d6 gofmt há 7 anos atrás
relfect2_386.s 3fc4794c80 import from plz há 7 anos atrás
relfect2_amd64p32.s 3fc4794c80 import from plz há 7 anos atrás
relfect2_arm.s 3fc4794c80 import from plz há 7 anos atrás
relfect2_arm64.s 3fc4794c80 import from plz há 7 anos atrás
relfect2_mips64x.s 3fc4794c80 import from plz há 7 anos atrás
relfect2_mipsx.s 3fc4794c80 import from plz há 7 anos atrás
relfect2_ppc64x.s 3fc4794c80 import from plz há 7 anos atrás
relfect2_s390x.s 3fc4794c80 import from plz há 7 anos atrás
safe_field.go 5db70aa4d6 gofmt há 7 anos atrás
safe_map.go 5db70aa4d6 gofmt há 7 anos atrás
safe_slice.go 5db70aa4d6 gofmt há 7 anos atrás
safe_struct.go 5db70aa4d6 gofmt há 7 anos atrás
safe_type.go 5db70aa4d6 gofmt há 7 anos atrás
test.sh b3b30f3fbe fix all tests há 7 anos atrás
type_map.go 5db70aa4d6 gofmt há 7 anos atrás
type_map_test.go 58ce5d9ea2 add README há 7 anos atrás
unsafe_array.go 5db70aa4d6 gofmt há 7 anos atrás
unsafe_eface.go 5db70aa4d6 gofmt há 7 anos atrás
unsafe_field.go 3fc4794c80 import from plz há 7 anos atrás
unsafe_iface.go 5db70aa4d6 gofmt há 7 anos atrás
unsafe_link.go 5db70aa4d6 gofmt há 7 anos atrás
unsafe_map.go 3fc4794c80 import from plz há 7 anos atrás
unsafe_ptr.go 5db70aa4d6 gofmt há 7 anos atrás
unsafe_slice.go 5db70aa4d6 gofmt há 7 anos atrás
unsafe_struct.go 5db70aa4d6 gofmt há 7 anos atrás
unsafe_type.go 5db70aa4d6 gofmt há 7 anos atrás

README.md

reflect2

Sourcegraph GoDoc Build Status codecov rcard License

reflect api that avoids runtime reflect.Value cost

  • reflect get/set interface{}, with type checking
  • reflect get/set unsafe.Pointer, without type checking
  • reflect2.TypeByName works like Class.forName found in java

json-iterator use this package to save runtime dispatching cost. This package is designed for low level libraries to optimize reflection performance. General application should still use reflect standard library.

reflect2.TypeByName

// given package is github.com/your/awesome-package
type MyStruct struct {
	// ...
}

// will return the type
reflect2.TypeByName("awesome-package.MyStruct")
// however, if the type has not been used
// it will be eliminated by compiler, so we can not get it in runtime

reflect2 get/set interface{}

valType := reflect2.TypeOf(1)
i := 1
j := 10
valType.Set(&i, &j)
// i will be 10

reflect2 get/set unsafe.Pointer

valType := reflect2.TypeOf(1)
i := 1
j := 10
valType.UnsafeSet(unsfae.Pointer(&i), unsafe.Pointer(&j))
// i will be 10