1 回答

TA貢獻1773條經驗 獲得超3個贊
Lookup
返回 a?Symbol
,這只是一個空接口。為了使用它,您需要斷言您想要的類型。例如,文檔Symbol
顯示了兩個斷言為預期類型的符號:
v, err := p.Lookup("V")
if err != nil {
? ? panic(err)
}
f, err := p.Lookup("F")
if err != nil {
? ? panic(err)
}
*v.(*int) = 7
f.(func())() // prints "Hello, number 7"
要在你的程序中做到這一點,創建你想要的類型,在這種情況下是一個接口,因為你正在尋找一個特定的方法集(參見接口的“Tour of Go”部分,特別是隱式實現和類型斷言)
V這里我們在主程序中創建接口來定義我們想要的方法,而不是對從返回的符號使用類型斷言Lookup:
type V interface {
? ? GetId() string
}
func main() {
? ? p, err := plugin.Open("plugin.so")
? ? if err != nil {
? ? ? ? panic(err)
? ? }
? ? s, err := p.Lookup("V")
? ? if err != nil {
? ? ? ? panic(err)
? ? }
? ? v := s.(V)
? ? fmt.Println(v.GetId())
}
- 1 回答
- 0 關注
- 141 瀏覽
添加回答
舉報