Golang-Build-So.md

Golang建置插件 (Translated by ChatGTP)

通常,如果我們想要將一個函數寫到另一個檔案中,可以使用 package

但在某些情況下,

我們要使用的函數和檔案是動態的,

此時,我們可以將這些檔案建置成 .so 檔案。

更具體來說,使用 go build -buildmode=plugin

然後在主要檔案中使用這個 .so 檔案。

plug, err := plugin.Open("extra.so")
runLib, err := plug.Lookup("targetFunctionName")
runLib.(func())()

CI/CD問題

當我們將主命令建置為二進位檔案,

並且該二進位檔案讀取動態的 .so 檔案時,

但如果我們建置二進位檔案的平台與我們建置 .so 檔案的平台不同,

我們會得到 plugin not implemented 錯誤。

解決方案

確保我們建置二進位檔案的平台與我們建置 .so 檔案的平台相同,

例如使用 Docker。