教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 关于golang reflect中传递的interface{}是指针还是非指针

关于golang reflect中传递的interface{}是指针还是非指针

发布时间:2021-05-22   编辑:jiaochengji.com
教程集为您提供关于golang reflect中传递的interface{}是指针还是非指针等资源,欢迎您收藏本站,我们将为您提供最新的关于golang reflect中传递的interface{}是指针还是非指针资源
///
type TestA struct {
  Flag bool
}
func (t *TestA) Run(a...int) int {
  var out int = 0;
  for _,i := range a {
    out  = i
  }
  return out
}


/// 注意: reflect.ValueOf接收的是值
func testA() {
  i := TestA{}
  vl := reflect.ValueOf(i)
  fmt.Println("value:",vl.FieldByName("Flag").Interface())
  //
  vl4fun := reflect.ValueOf(&i)
  args := []reflect.Value{reflect.ValueOf(int(2))}
  fmt.Println("value:",vl4fun.MethodByName("Run").Call(args)[0].Interface())
}

/// 注意: reflect.ValueOf接收的是指针
func testA4P() {
  i := new(TestA)
  vl := reflect.ValueOf(i)
  fmt.Println("value:",vl.Elem().FieldByName("Flag").Interface())
  //
  vl4fun := reflect.ValueOf(i)
  args := []reflect.Value{reflect.ValueOf(int(2))}
  fmt.Println("value:",vl4fun.MethodByName("Run").Call(args)[0].Interface())
}
///TestB
type TestB struct {
  Flag bool
}

/**************************************************************************/
// 注意: 此处定义是非指针
func (t TestB) Run(a...int) int {
  var out int = 0;
  for _,i := range a {
    out  = i
  }
  return out
}
func testB() {
  i := TestB{}
  vl := reflect.ValueOf(i)
  //
  fmt.Println("value:",vl.FieldByName("Flag").Interface())
  args := []reflect.Value{reflect.ValueOf(int(2))}
  fmt.Println("value:",vl.MethodByName("Run").Call(args)[0].Interface())
}

//main
func main() {
  testB()
}
到此这篇关于“关于golang reflect中传递的interface{}是指针还是非指针”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
关于golang reflect中传递的interface{}是指针还是非指针
golang传递接口类型参数时,什么时候用指针
golang 结构体断言_Golang中的reflect原理
活学活用golang的反射机制
reflect笔记
golang 面试题(十三)interface内部结构和nil详解
Golang使用reflect操作struct
golang的反射机制与实践(上)
Golang reflect机制实现struct 复制/选择复制
指针和参数传递(Go语言)

[关闭]
~ ~