为了账号安全,请及时绑定邮箱和手机立即绑定

插件包中的 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 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信