gpt4 book ai didi

pointers - 插件包中的 Lookup 返回什么?

转载 作者:行者123 更新时间:2023-12-01 21:09:34 24 4
gpt4 key购买 nike

这是一个代码块。

    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 , 符号是指向变量或函数的指针。如果我对 xmapf 的类型是正确的, 为什么 func_pointer.(signature)返回一个函数?

最佳答案

Plugin.Lookup() 返回 plugin.Symbol 这只是一个空的interface{}值(value):

type Symbol interface{}
Go 中还没有泛型,因此这是必需的,因此您可以使用单个查找函数来查找任何类型的变量和函数。
你需要使用 type assertion在返回的符号上以从中获取具体(或其他接口(interface))类型的值。
xmapf.(func(string, string) []mr.KeyValue)
这是一个类型断言,如果它成立(如果 xmapf 不是 nil 并且它拥有具体类型的值 func(string, string) []mr.KeyValue ),则类型断言的结果将是该类型的值。 “那个”类型是一个函数类型,所以如果类型断言成立, mapf将保存一个您可以“直接”调用的函数值,例如
var keyValues []mr.KeyValue
keyValues = mapf("a", "b")

关于pointers - 插件包中的 Lookup 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63169582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com