把结构pointer转成interface{}后怎么转回来

weixin_38066495 2019-09-20 10:45:30
```
package main

import (
"fmt"
)

type dog struct {
Name string
}

func recv(intf interface{}) {

//how to get the &d value ?

}

func main() {
var d = dog{ Name: "Bolter"}

fmt.Printf("intf: %p\n", &d)

recv(&d)

}
```
...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38090265 2019-09-20
  • 打赏
  • 举报
回复
可以用 func recv(intf interface{}) { //how to get the &d value ? dog := intf.(*dog) } 来获取,心诚则灵
weixin_38114312 2019-09-20
  • 打赏
  • 举报
回复
已经搞定了, 实际上recv是一个跟具体类型脱离的函数,不能引入具体的类型,比如dog, 因为还有可能是cat 有简单函数就能搞定: v:= reflect.ValueOf(intf).Pointer() //这个就是对象的指针 另外直接改成unsafe.Pointer也能搞定
???1111 2019-09-20
  • 打赏
  • 举报
回复
你这里很奇怪, 我一直都是这么使用的毫无问题, 你不就是要转成*dog, 然后操作dog的东西么。 为啥要牵扯到指针呢? 如果类型不明就算拿到了pointer指针你接下来怎么玩呢? 转化不了具体数据类型的指针就是一个数字而已。 你如果说这里可能是dog, 也可能是cat是要实现动态判断吗? 你可以用swith type这种经典的用法 switch intf.(type) { case *Dog: dog := intf.(*Dog) case *Cat: cat:= intf.(*Cat) default: doSomeDefaultThing() } 楼主是C或者C++转过来的吗?思路有点奇特。
weixin_38119848 2019-09-20
  • 打赏
  • 举报
回复
我没说你的写法有问题,转成具体类型是基本用法, 这个用不着问啊 recv和具体类型脱离, 进队列啊, 去重啊等等都不一定要转出来的
weixin_38069520 2019-09-20
  • 打赏
  • 举报
回复
断言
weixin_38082570 2019-09-20
  • 打赏
  • 举报
回复
intf.(dog) ?

435

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧