社区
其他技术讨论专区
帖子详情
把结构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
打赏
收藏
把结构pointer转成interface{}后怎么转回来
``` 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) } ```
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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) ?
[Go] 利用类型断言把
interface
{}的
转
换回原类型
当传参数的时候 ,为了方便 ,参数的类型定义
成
了
interface
{} , 如果要给这个原类型的属性赋值 , 就需要强
转
回去 例如下面的代码: func RenderList(w http.ResponseWriter, render
interface
{}) { header := ...
golang判空的几种方法
go 用 一个 eface的
结构
体表示
interface
{} 类型, eface 有两个字段,一个是type表示类型,一个是 unsafe.
Pointer
用来表示指针指向的地址, 可以用 unsafe.
Pointer
的方式
转
回来
,然后单独判断
interface
{} 值指向...
面试官:说说unsafe.
Pointer
和uintptr的区别和联系
= uintptr 我已经提到过,指针可以
转
换为 uintptr 并
转
回来
,但是
转
回来
是有一些特殊的条件限制的。unsafe.
Pointer
是一个真正的指针,它不仅保持内存地址,包括动态链接的地址,但 uintptr 只是一个数字,因此它更...
delphi 接口
Interface
用接口的概念去理解和构造跨进程或分布式的软件
结构
,比起早期直接使用的远过程调用(RPC)等低级概念 更直观和简单。因为可以象理解一个对象一样理解一个接口,而不再关心这个对象是本地的或远程的。 在...
Go学习总结
go语言直接使用utf8编码,所以不像其他某些语言,需要将文件
转
成
unicode码存储在内存中。而是直接使用utf8码进行操作。最后两种需要
转
换类型,要进行复制,不建议使用。 4.字符串和数字
转
换 将数字
转
换
成
字符串 ...
其他技术讨论专区
435
社区成员
791,270
社区内容
发帖
与我相关
我的任务
其他技术讨论专区
其他技术讨论专区
复制链接
扫一扫
分享
社区描述
其他技术讨论专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章