I-Code, der folgende Struktur hat:Schnittstelle hat kein Feld oder eine Methode für eine exportierte Feld in einer Struktur
// $GOPATH/experiments/interfaceexport/printer/printer.go
package printer
import "fmt"
type ResourcePrinter interface {
PrintSomething()
}
type JSONPrinter struct {
IsGeneric bool
}
func (printer *JSONPrinter) PrintSomething() {
fmt.Println("JSON")
}
// $GOPATH/experiments/interfaceexporter/printerretriever/printerretriever.go
package printer
import "experiments/interfaceexporter/printer"
func GetPrinter() printer.ResourcePrinter {
return &printer.JSONPrinter{IsGeneric: true}
}
// $GOPATH/experiments/interfaceexport/main.go
import "experiments/intefaceexport/printerretriever"
func main() {
printer := printerretriever.GetPrinter()
printer.PrintSomething() // "JSON"
// interfaceexport/main.go:13: printer.IsGeneric undefined (type printer.ResourcePrinter has no field or method IsGeneric)
if printer.IsGeneric {
printer.PrintSomething()
}
}
Wenn ich go run main.go
erhalte ich Fehler folgende:
interfaceexport/main.go:13: printer.IsGeneric undefined (type printer.ResourcePrinter has no field or method IsGeneric)
Warum erhalte ich den obigen Fehler, obwohl IsGeneric
exportiert wird?
Alternative Vorgehensweise: http://Stackoverflow.com/a/26027902/6309 – VonC
Ich denke, ich habe ein Rindfleisch mit "hat kein Feld" Feld Teil in der Fehlermeldung. Obwohl der Compiler weiß, dass printer.ResourcePrinter eine Schnittstelle ist, heißt es, dass IsGeneric auch ein Feld sein könnte. AFAIK gibt es keinen Weg in Go kann man Felder wie Strukturen für Schnittstellen definieren. – Waseem