作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
接口(interface)已经包含一个指向值的指针,在我的例子中它是一个结构,我需要从接口(interface){}中获取一个结构指针。
用例是 sync.Map,我将一个包含锁的结构放入映射中,使用 Load() 方法我可以读取 interface{} 值。我想得到指向原始结构的指针,所以我不复制锁。
另一种方法是将指向结构的指针添加到 Map,然后将其读回并将接口(interface){}转换为结构指针,但我很好奇是否可以实现第一种情况。
最佳答案
你不能那样做。如果在接口(interface)中“包装”一个非指针值,则只能使用 type assertion 从中获取非指针值。或 type switch .而且由于类型断言表达式不是 addressable ,你无法获取接口(interface)中包裹的“值”的地址。
如果您只有一个包装在接口(interface)中的值,您将无法获得指向包装在接口(interface)中的原始值的指针。为什么?因为包装在接口(interface)中的值可能只是一个副本,完全脱离了原来的东西。请在此处查看示例和解释:How can a slice contain itself?
请注意,即使您包装了一个非指针值,实际包装的值也可能是也可能不是指针(取决于值的大小),但这是实现细节,对您是隐藏的。当你提取值时,你当然会得到一个非指针。
关于dictionary - 如何将接口(interface){}转换为结构指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51379055/
我是一名优秀的程序员,十分优秀!