ホームページ  >  記事  >  バックエンド開発  >  Goで動的ライブラリまたは静的ライブラリを生成する方法

Goで動的ライブラリまたは静的ライブラリを生成する方法

尚
転載
2019-11-28 15:21:524877ブラウズ

Goで動的ライブラリまたは静的ライブラリを生成する方法

#予備知識


  • プラグイン モード

  • プラグイン実行モード

  • ##go プラグイン パッケージの使用
  • 関連知識 (推奨:
go 言語チュートリアル

)go build あなたbuildmode を指定できます。複数のモードに分かれています。具体的なモードは以下の通りです。

モード現在の Go バージョンarchivec-archivec-shareddefaultexeplugin
説明
1.10.3
バイナリ ファイルにコンパイルします。通常、これは静的ライブラリ ファイルです。 xx.a
は C アーカイブ ファイルにコンパイルされます。 C 呼び出し可能な静的ライブラリ。 xx.a.このようなファイルにコンパイルするには、C をインポートする必要があり、外部から呼び出す関数を「//export 関数名」を使用して関数の上にコメントする必要があることに注意してください。それ以外の場合、関数はデフォルトではエクスポートされません。
C 共有ライブラリにコンパイルします。また、メイン パッケージで実行可能ファイルに直接コンパイルするために、関数の上に「C」をインポートし、 // エクスポート xxx
とコメントする必要があります。メイン パッケージがない場合は、.a ファイルにコンパイルします。
ウィンドウ実行可能プログラムにコンパイルします。
メイン パッケージと依存パッケージを go プラグインにコンパイルします。メイン以外のパッケージは無視されます。 [C ライクな共有ライブラリまたは静的ライブラリ。プラグイン開発用途】

インスタンス

结构:
    -softplugin         //根目录
        -soft           //软件目录
        -plugins         //插件目录
        -itf            //接口目录

カスタム データなし

// plugins/hello.go
package main
import "fmt"
func Hello(){
    fmt.Println("hello")
}
// go build -buildmode=plugin -o hello.so hello.go


// soft/basetype.go
package main
import (
    "os"
    "path"
    "plugin"
    "fmt"
)

func main(){
    //加载插件
    pluginDir := "../plugins"
    //扫描文件夹下所有so文件
    f, err := os.OpenFile(pluginDir, os.O_RDONLY, 0666)
    if err != nil {
        panic(err)
    }
    fi, err := f.Readdir(-1)
    if err != nil {
        panic(err)
    }
    plugins := make([]os.FileInfo, 0)
    for _, ff := range fi {
        if ff.IsDir() || path.Ext(ff.Name()) != ".so" {
            continue
        }
        plugins = append(plugins, ff)
        pdll, err := plugin.Open(pluginDir + "/" + ff.Name())
        if err != nil {
            fmt.Println(err)
            continue
        }
        plg, err := pdll.Lookup("Hello")
        if err != nil {
            panic(err)
        }
       plg.(func())()
    }
}
// go run basetype.go

プラグインを定義するインターフェースインターフェース。

rree

以上がGoで動的ライブラリまたは静的ライブラリを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。