douliangpo0128 2016-05-20 09:44
浏览 184
已采纳

如何从Go中的struct的接口实例获取属性

I want to get the v.val, but the go compiler throw me an Error:

v.val undefined (type testInterface has no field or method val)

but in the v.testMe method,It work.

package main

import (
    "fmt"
)

type testInterface interface {
    testMe()
}

type oriValue struct {
    val int
}

func (o oriValue) testMe() {
    fmt.Println(o.val, "I'm test interface")
}

func main() {
    var v testInterface = &oriValue{
        val: 1,
    }
    //It work!
    //print 1 "I'm test interface"
    v.testMe()
    //error:v.val undefined (type testInterface has no field or method val)
    fmt.Println(v.val)
}
  • 写回答

1条回答 默认 最新

  • doukan4795 2016-05-20 10:10
    关注

    You need to convert back your interface to the real type. Please check below :

    package main
    
    import (
        "fmt"
    )
    
    type testInterface interface {
        testMe()
    }
    
    type oriValue struct {
        val int
    }
    
    func (o oriValue) testMe() {
        fmt.Println(o.val, "I'm test interface")
    }
    
    func main() {
        var v testInterface = &oriValue{
            val: 1,
        }
        //It work!
        //print 1 "I'm test interface"
        v.testMe()
        //error:v.val undefined (type testInterface has no field or method val)
        fmt.Println(v.(*oriValue).val)
    }
    

    Check on Go Playground

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计