2016-05-20 7 views
0

に構造体からinterfceインスタンスから属性を取得するにはどうすればv.valを取得したいが、行くコンパイラは私にエラーをスロー:はゴー

v.val undefined (type testInterface has no field or method 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) 
} 

答えて

0

インターフェイスを実際のタイプに戻す必要があります。下記をご確認ください:

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) 
} 

チェックGo Playground

+0

おかげで多くのことをそれは私の一日を救うのです! – user1458435