Wie

2016-05-20 14 views
0

Attribut aus einer INTERFCE Instanz von struct in Go bekommen möchte ich die v.val bekommen, aber die Go-Compiler mir einen Fehler werfen:Wie

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

aber in der v.testMe Methode, es funktioniert.

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

Antwort

0

Sie müssen Ihre Schnittstelle zurück zum echten Typ konvertieren. Bitte überprüfen Sie unter:

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

prüfen auf Go Playground

+0

Vielen Dank Das ist mein Tag retten! – user1458435