首页 > 后端开发 > Golang > 正文

关于golang中无法获取地址问题的解析

王林
发布: 2019-12-24 16:46:12
原创
3647 人浏览过

关于golang中无法获取地址问题的解析

代码实例如下:

func main() {
    var a Integer = 1
    var b Integer = 1
    sum := a.Add(b)
    fmt.Println(sum)

    var i interface{} = a
    sum = i.(Integer).Add(b) // 报错
    fmt.Println(sum)
}

type Integer int

func (a *Integer) Add(b Integer) Integer {
    return  *a + b
}
登录后复制

报错信息如下:

test\testVar.go:16:19: cannot call pointer method on i.(Integer)
test\testVar.go:16:19: cannot take the address of i.(Integer)
登录后复制

出现这种情况是因为Add方法需要一个Integer指针类型的接收器,而我们传过去的i.(Integer)是个值,且这个值也没有赋给任何变量,所以符号“&”是获取不到地址的。

正确的方式是将i.(Integer)赋值给一个变量,或者把方法接收器改成普通类型。

代码示例如下:

   var i interface{} = a
    c := i.(Integer)
    sum = c.Add(b)
    fmt.Println(sum)
登录后复制

或者

func (a Integer) Add(b Integer) Integer {    
return  a + b
}
登录后复制

相关文章教程推荐:golang教程

以上是关于golang中无法获取地址问题的解析的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!