ホームページ >バックエンド開発 >Golang >外部の Go コードを既存の Go バイナリに動的にリンクするにはどうすればよいですか?

外部の Go コードを既存の Go バイナリに動的にリンクするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-04 22:16:14809ブラウズ

How Can I Dynamically Link External Go Code into an Existing Go Binary?

Go バイナリでの動的リンク

問題:

既存の Go バイナリを使用しないため、外部 Go ファイルをコンパイルして機能を追加する必要があります。コンパイルが完了したら、アプリケーション全体を再構築せずに、この新しいコードをバイナリに統合する必要があります。

解決策:

Go 1.5 以降では、次のことが可能になりました。共有ライブラリを動的に構築してリンクします。目的の機能を実現する方法は次のとおりです。

  • 共有ライブラリの作成:
$ go install -buildmode=shared std

このコマンドは、標準ライブラリを共有ライブラリとして構築します。

  • 外部 Go のコンパイルファイル:

次のように外部 Go ファイルをコンパイルします:

$ go build -linkshared hello.go
  • 共有ライブラリのリンク:

外部 Go ファイルがコンパイルされたら、次のコマンドを使用して既存のバイナリにリンクできます。 -linkshared flag:

$ go install -linkshared mybinary.go
  • Usage:

既存のバイナリ内で、他の関数と同様に新しくコンパイルされたコードを呼び出すことができるようになりましたバイナリで定義される

例:

package main

import (
    "fmt"
    "github.com/myimportpath/mypackage"
)

func main() {
    fmt.Println("Before calling compiled code")
    mypackage.RunFoo()
    fmt.Println("After calling compiled code")
}

以上が外部の Go コードを既存の Go バイナリに動的にリンクするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。