亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

插件包中的 Lookup 返回什么?

插件包中的 Lookup 返回什么?

Go
桃花長相依 2022-06-21 10:48:19
這是一個代碼塊。    p, err := plugin.Open(filename)    if err != nil {        log.Fatalf("cannot load plugin %v", filename)    }    xmapf, err := p.Lookup("Map")    if err != nil {        log.Fatalf("cannot find Map in %v", filename)    }    mapf := xmapf.(func(string, string) []mr.KeyValue)我知道這段代碼是加載一個插件并Map在其中找到一個函數。但我對此感到困惑xmapf.(func(string, string) []mr.KeyValue)。是什么類型的xmapf?golang 文檔說它是一個Symbol, A Symbol 是一個指向變量或函數的指針。如果我對 的類型是正確的xmapf,為什么要func_pointer.(signature)返回一個函數?
查看完整描述

1 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

Plugin.Lookup()返回一個plugin.Symbol簡單的空interface{}值:

type Symbol interface{}

Go 中還沒有泛型,因此這是必需的,因此您可以使用單個查找函數來查找任何類型的變量和函數。

并且您需要對返回的符號使用類型斷言以從中獲取具體(或其他接口)類型的值。

xmapf.(func(string, string) []mr.KeyValue)

這是一個類型斷言,如果它成立(如果xmapfnil成立并且它擁有一個具體類型的值func(string, string) []mr.KeyValue),那么類型斷言的結果將是該類型的一個值?!澳莻€”類型是一個函數類型,所以如果類型斷言成立,mapf將持有一個你可以“直接”調用的函數值,比如

var keyValues []mr.KeyValue
keyValues = mapf("a", "b")


查看完整回答
反對 回復 2022-06-21
  • 1 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號