dqkyz02602 2014-12-05 13:01
浏览 29
已采纳

使用nil指针定义的类型创建一个带有反射的新结构

I would like know if it is possible to allocate a struct from a type specified by a nil pointer by using reflect.New()

type SomeType struct{
   A int
}

sometype := (*SomeType)(nil)

v := reflect.valueOf(sometype)
// I would like to allocate a new struct based on the type defined by the pointer
// newA := reflect.New(...)
//
newA.A = 3

How should I do this ?

  • 写回答

1条回答 默认 最新

  • doumi4974 2014-12-05 13:45
    关注

    Use reflect.Type.Elem():

    s := (*SomeType)(nil)
    t := reflect.TypeOf(s).Elem()
    
    v := reflect.New(t)
    sp := (*SomeType)(unsafe.Pointer(v.Pointer()))
    sp.A = 3
    

    Playground: http://play.golang.org/p/Qq8eo-W2yq

    EDIT: Elwinar in comments below pointed out that you can get the struct without unsafe.Pointer by using reflect.Indirect():

    s := (*SomeType)(nil)
    t := reflect.TypeOf(s).Elem()
    
    ss := reflect.Indirect(reflect.New(t)).Interface().(SomeType)
    ss.A = 3
    

    Playground: http://play.golang.org/p/z5xgEMR_Vx

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图