代码实例如下:

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 intfunc (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教程

更多相关文章

  1. 记一次因为共享变量的犯错误
  2. go语言环境变量如何设置
  3. go语言如何判断变量是slice还是array
  4. 从.env文件中为NodeJS加载环境变量[每日前端夜话0xA9]
  5. 学习C的第二天-变量
  6. pandas100个骚操作:变量类型自动转换
  7. Python 中更优雅的环境变量设置方案
  8. 离散型随机变量的概率分布
  9. 醒醒!Python已经支持中文变量名啦!

随机推荐

  1. 深入typeclass_Haskell笔记4
  2. 【Java】留下没有基础眼泪的面试题
  3. 类型_Haskell笔记3
  4. 使用 IntelliJ 调试 Java Streams
  5. 六一儿童节,送你一个F字符串
  6. 每周 10 道 Java 面试题:集合类
  7. 学习linux的第5天
  8. 如何使用maven 轻松重构项目
  9. iPhone要降价?巨头战争很激烈
  10. 【Java】几道让你拿offer的面试题