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

我想得到v.val,但是 go 编译器给我一个错误:


v.val 未定义(类型 testInterface 没有字段或方法 val)


但是在v.testMe方法中,它可以工作。


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)

}


小怪兽爱吃肉
浏览 183回答 1
1回答

至尊宝的传说

您需要将界面转换回真实类型。请检查以下:package mainimport (    "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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go