文档中心
入门 · 为什么用Python

🐍 为什么从 Go 重构为 Python?

Go 的 plugin 包不适合热插拔场景。.so 文件与主程序是独立编译单元,类型不共享,依赖注入后接口不匹配会导致 panic。Python 的动态特性天然适合插件化架构。

技术对比

问题Go 方案Python 方案
插件热插拔plugin.Open(".so")importlib 动态加载 .py
依赖注入反射注入,类型不匹配 → panic直接传 dict/对象,无编译隔离
开发效率每次改插件需重新编译改完即生效,零编译
配置类型map[string]string 限制dict[str, Any] 原生支持任意类型

Go 插件系统的致命问题

Go 的插件机制依赖 plugin.Open() 加载编译好的 .so 文件。每个 .so 是独立的编译单元,无法共享类型定义。这意味着插件中定义的接口与框架中的接口即使签名相同,也被视为不同类型,导致依赖注入后接口为 nil,运行时直接 panic

Python 的优势

  • 动态类型 — 没有编译时类型检查,插件直接使用框架定义的类型
  • importlib — 运行时动态加载 .py 文件,零编译开销
  • 类型共享 — 插件通过 from oss.plugin.types import Plugin 直接引用框架类型
  • 开发迭代快 — 改完代码即生效,无需重新编译
获取更多信息