1 回答

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
Lookup
返回 a?Symbol
,這只是一個(gè)空接口。為了使用它,您需要斷言您想要的類型。例如,文檔Symbol
顯示了兩個(gè)斷言為預(yù)期類型的符號(hào):
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"
要在你的程序中做到這一點(diǎn),創(chuàng)建你想要的類型,在這種情況下是一個(gè)接口,因?yàn)槟阏趯ふ乙粋€(gè)特定的方法集(參見(jiàn)接口的“Tour of Go”部分,特別是隱式實(shí)現(xiàn)和類型斷言)
V這里我們?cè)谥鞒绦蛑袆?chuàng)建接口來(lái)定義我們想要的方法,而不是對(duì)從返回的符號(hào)使用類型斷言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 關(guān)注
- 137 瀏覽
添加回答
舉報(bào)