This commit is contained in:
guoxudong
2020-06-05 09:42:05 +08:00
parent 8ce637a004
commit 8f0900f95e
3 changed files with 16 additions and 17 deletions

View File

@@ -5,7 +5,7 @@
# Go plugin 注意事项
_Go 插件_由 Go [plugin package] 描述的编译器,需要特殊的构建标志,不能单独运行,必须加载到正在运行的 Go 程序中。
_Go 插件_一个编译产品/组件,其定义见 [plugin package],需要特殊的构建标志,不能单独运行,必须加载到正在运行的 Go 程序中。
> 用 Go 编写的普通程序可以作为 _exec 插件_但是不能作为 _Go 插件_。
@@ -19,9 +19,9 @@ Go 插件编译会创建一个 [ELF] 格式的 `.so` 文件,根据定义,该
主程序 ELF 和插件 ELF 的编译条件(软件包依赖项的版本 `GOOS``GOARCH`)之间的偏移会导致插件加载失败,并带有无用的错误消息。
Exec 插件也会缺乏出处,但不会因编译不正确而失败。
Exec 插件也会缺乏来源,但不会因编译不正确而失败。
在任何情况下,共享插件的最好方法是使用某种 _捆绑包_git repo URL、git 存档文件、tar 包等),其中包含可在下解包的源代码,测试和相关数据 `$XDG_CONFIG_HOME/kustomize/plugin`
在任何情况下,共享插件的最好方法是使用某种 _捆绑包_git repo URL、git 存档文件、tar 包等),其中包含可解包至 `$XDG_CONFIG_HOME/kustomize/plugin` 的源代码,测试和相关数据
对于 Go 插件,使用共享插件的最终用户 _必须同时编译 kustomize 和 plugin_
@@ -47,15 +47,15 @@ go build -buildmode plugin \
### 安全
Go 插件开发者可以操作与原生 kustomize 操作相同的 API可确保某些语义、变量和检查等一致。通过stdin/stdout 处理此问题的 exec 插件子流程将使下游转换器和使用者解决问题变得更容易
Go 插件开发者可以操作与原生 kustomize 操作相同的 API可确保某些语义、变量和检查等一致。exec 插件子进程通过 stdin/stdout 处理这些问题,但对于下游的转化器和使用者来说,会更容易把事情搞砸
关键点:如果插件通过 kustomize 提供的文件 `Loader` 接口读取文件,则会受到 kustomize 文件加载限制的约束。当然,除了代码审之外,没有什么可以阻止 Go 插件导入 io 包并执行其所需的任何操作。
关键点:如果插件通过 kustomize 提供的文件 `Loader` 接口读取文件,则会受到 kustomize 文件加载限制的约束。当然,除了代码审之外,没有什么可以阻止 Go 插件导入 io 包并执行其所需的任何操作。
### Debugging
Go 插件开发者可以在功能测试中运行插件时,在 _本地_ 调试插件,并在插件内部和其他位置设置断点。
为了获得两全其美的方式(共享性和安全性),开发人员可以编写一个 `.go` 程序作为 _exec 插件_但可以通过处理该程序 `go generate` 来发出 Go 插件(反之亦然)。
为了获得两全其美的方式(共享性和安全性),开发人员可以编写一个 `.go` 程序作为 _exec 插件_同时可以被 `go generate` 程序处理生成 Go 插件(反之亦然)。
### 贡献单元化