基于 purego 实现的无 CGO 纯 Go 项目,通过 purego 直接绑定并调用 onnxruntime 原生库接口,无需依赖 CGO 编译环境,
即可实现 ONNX 模型的加载与推理计算,基于 onnxruntime 1.24.1 的头文件实现。
下载 onnxruntime 1.24 动态链接库,安装 onnxruntime_purego 库,版本对应关系:
| onnxruntime | onnxruntime_purego |
|---|---|
| 1.24 | v1.24.0 |
| 1.23 | v1.23.0 |
# 下载最新版本
go get -u github.com/getcharzp/onnxruntime_purego
# 针对 onnxruntime 1.24 下载特定版本 purego
go get -u github.com/getcharzp/onnxruntime_purego@v1.24package main
import (
ort "github.com/getcharzp/onnxruntime_purego"
"log"
)
const testModelPath = "./testdata/yolo11n.onnx"
func main() {
engine, _ := ort.NewEngine(ort.DefaultLibraryPath())
defer engine.Destroy()
session, err := engine.NewSession(testModelPath, nil)
if err != nil {
log.Fatal(err)
}
defer session.Destroy()
inputData := make([]float32, 3*640*640)
inputValue, err := engine.NewTensor([]int64{1, 3, 640, 640}, inputData)
if err != nil {
log.Fatal(err)
}
defer inputValue.Destroy()
inputs := map[string]*ort.Value{
"images": inputValue,
}
outputs, err := session.Run(inputs)
if err != nil {
log.Fatal(err)
}
for name, output := range outputs {
outputData, err := ort.GetTensorData[float32](output)
if err != nil {
log.Fatal(err)
}
log.Printf("%v: %+v", name, outputData[:min(len(outputData), 20)])
}
}| 原图 | Mask图 |
|---|---|
![]() |
![]() |


