pkujhd / goloader

load and run golang code at runtime.
Apache License 2.0
497 stars 58 forks source link

能直接加载plugin so吗 #52

Closed lsg2020 closed 2 years ago

lsg2020 commented 2 years ago

当一个文件引用的模块比较多时,每个模块都用go install编译会比较繁锁,能直接加载/卸载 plugin编译出来的so文件吗

pkujhd commented 2 years ago

当一个文件引用的模块比较多时,每个模块都用go install编译会比较繁锁,能直接加载/卸载 plugin编译出来的so文件吗

不能加载.so

eh-steve commented 1 year ago

You may be interested in the JIT compiler in #66.

You can simply do:


loadable, err = jit.BuildGoFiles(jit.BuildConfig{}, "./path/to/file1.go", "/path/to/file2.go")
// or
loadable, err = jit.BuildGoPackage(jit.BuildConfig{}, "./path/to/package")
// or
loadable, err = jit.BuildGoText(jit.BuildConfig{}, `
package mypackage

import "encoding/json"

func MyFunc(input []byte) (interface{}, error) {
    var output interface{}
    err := json.Unmarshal(input, &output)
    return output, err
}

`)

if err != nil {
    panic(err)
}

module, symbols, err = loadable.Load()

if err != nil {
    panic(err)
}

MyFunc := symbols["MyFunc"].(func([]byte) (interface{}, error))