MST

星途 面试题库

面试题:Go中如何实现一个简单的插件加载机制

请描述在Go语言中实现一个能够加载并调用外部插件函数的基本步骤,假设插件提供了一个简单的计算加法的函数,需要写出加载插件以及调用该加法函数的大致代码框架。
31.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 编写插件代码
    • 首先编写插件代码,插件需要导出要调用的函数。假设插件文件名为add_plugin.go
    // add_plugin.go
    package main
    
    //export Add
    func Add(a, b int) int {
        return a + b
    }
    
    • 然后将其编译为插件:
    go build -buildmode=plugin -o add_plugin.so add_plugin.go
    
  2. 加载并调用插件
    • 在主程序中加载并调用插件函数,假设主程序文件名为main.go
    package main
    
    import (
        "fmt"
        "plugin"
    )
    
    func main() {
        p, err := plugin.Open("add_plugin.so")
        if err!= nil {
            fmt.Println("Open plugin error:", err)
            return
        }
        symbol, err := p.Lookup("Add")
        if err!= nil {
            fmt.Println("Lookup symbol error:", err)
            return
        }
        addFunc, ok := symbol.(func(int, int) int)
        if!ok {
            fmt.Println("Invalid type assertion")
            return
        }
        result := addFunc(3, 5)
        fmt.Println("Add result:", result)
    }
    

在上述代码中:

  • 第一步先编写并编译插件,通过-buildmode=plugin编译选项将Go代码编译为共享对象文件(.so)。
  • 第二步在主程序中,使用plugin.Open打开插件文件,p.Lookup查找插件中导出的函数,然后通过类型断言将其转换为合适的函数类型并调用。