繁体   English   中英

如何将interface {}转换为结构指针?

[英]How to cast an interface{} to a struct pointer?

接口已经包含一个指向值的指针,在我的情况下,它是一个结构体,我需要从接口{}中获取结构体指针。

用例是sync.Map,其中将包含锁的结构放入映射中,并使用Load()方法可以读取interface {}值。 我想获得指向原始结构的指针,所以我不复制锁。

另一种方法是向该Map添加一个指向该结构的指针,然后将其读回并将interface {}转换为该结构指针,但是我很好奇是否可以实现第一种情况。

你不能那样做。 如果在接口中“包装”非指针值,则只能使用类型断言类型switch从其中获取非指针值。 而且由于类型断言表达式不可寻址 ,因此无法获取包装在接口中的“值”的地址。

如果只在接口中包装了一个值,则将无法获得指向包装在接口中的原始值的指针。 为什么? 因为包装在接口中的值只能是一个副本,所以与原始版本完全分开。 在此处查看示例和说明: 切片如何包含自身?

请注意,即使您包装了非指针值,实际上包装的值也可能不是指针(取决于值的大小),但这是实现细节,对您而言是隐藏的。 当您提取值时,您当然会得到一个非指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM