Golang と Python は 2 つの非常に人気のあるプログラミング言語であり、どちらも幅広いアプリケーション シナリオを備えています。場合によっては、特定のタスクを一緒に完了するためにこれら 2 つの言語を使用する必要がある場合、Python を使用して Golang プログラミングを支援するにはどうすればよいでしょうか?この記事では、Golang が Python をどのように使用するかを詳しく説明します。
1. Golang プログラミングを支援するために Python を使用する必要があるのはなぜですか?
Golang 開発プロセスでは、データ分析や機械学習などの特定のタスクを処理するために Python を使用する必要がある場合があります。 、および Web クローラー。お待ちください。これらのタスクは Golang でも実行できますが、これらの分野では Python の方が広く使用され、成熟しているため、Python を使用するとこれらのタスクをより速く、より便利に実行できます。
2. golang が Python プログラムを呼び出す方法
Golang では、os パッケージの Exec 関数を通じて Python プログラムを実行できます。サンプル コードは次のとおりです:
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("python", "test.py", "arg1", "arg2") out, err := cmd.CombinedOutput() if err != nil { fmt.Println(err) } fmt.Println(string(out)) }
上記のコードでは、exec パッケージの Command 関数を使用して、Python プログラムを実行するコマンドを作成します。このうち、最初のパラメータは実行するプログラムの名前、2番目のパラメータはプログラムに渡されるパラメータです。この例では、test.py プログラムを実行し、2 つのパラメーター arg1 と arg2 を渡します。
CombinedOutput メソッドを使用してコマンドを起動し、プログラムを実行します。戻り値はプログラムの出力結果と実行時のエラー メッセージです。エラーが発生した場合は、err 変数に値が割り当てられます。それ以外の場合は、out 変数にプログラムの出力が含まれます。
サンプルコードではPythonスクリプトtest.pyを使用していますが、次章以降でPythonプログラムの書き方を詳しく説明していきます。
3. Python が Golang と対話する方法
コマンド ラインを介して Python プログラムを実行することに加えて、Python の標準ライブラリを介して Golang と対話することもできます。 Python は、Python で Golang の C 言語インターフェイスを呼び出し、両者間の通信を実現するための ctypes や cffi などのいくつかのモジュールを提供します。
以下は、Python で Golang 関数を呼び出して結果を返す方法を示す簡単なサンプル コードです。
package main import "C" // 导出函数 //export SayHello func SayHello(name *C.char) *C.char { return C.CString("Hello, " + C.GoString(name) + "!") } func main() {}
Golang では、文字列パラメーターを受け取り、文字列を返す SayHello 関数を定義します。この関数は、型変換に CGo 言語の C.CString 関数と C.GoString 関数を使用します。
import ctypes lib = ctypes.cdll.LoadLibrary('./main.so') # 指定函数返回类型 lib.SayHello.argtypes = [ctypes.c_char_p] lib.SayHello.restype = ctypes.c_char_p # 调用函数 result = lib.SayHello(b'World') print(result.decode())
Python では、ctypes モジュールを使用してコンパイルされた main.so ライブラリを読み込み、SayHello 関数のパラメーター タイプを指定しますそして戻り値の型。次に、この関数を呼び出して文字列パラメータ「World」を渡すと、出力結果は「Hello, World!」になります。
上記のコード例は、Python で Golang 関数を呼び出して結果を返す方法を示しています。
4. Python プログラムで Golang コードを使用する方法
Golang コードを Python プログラムで使用し、Golang プログラムの出力結果を取得することもできます。これを行うには、CGo 言語の C コード インターフェイスを使用して Golang 関数を C 関数にカプセル化し、Python の ctypes モジュールを通じて C 関数を呼び出す必要があります。
以下は、Python で Golang コードを使用する方法を示す簡単なコード例です。
package main import "C" // 导出函数 //export SayHello func SayHello(name *C.char) *C.char { return C.CString("Hello, " + C.GoString(name) + "!") } func main() {}
#ifndef MAIN_H #define MAIN_H #ifdef __cplusplus extern "C" { #endif // 声明导出函数 char* SayHello(char*); #ifdef __cplusplus } #endif #endif
Python モジュールは Go 関数を直接参照できないため、 C インターフェイスを介して関数を実行します。
#include <stdlib.h> #include "main.h" // 使用import来导入Go包 #include "_cgo_export.h" char* SayHello(char* name) { char* result = (char*)malloc(50 * sizeof(char)); sprintf(result, "%s", SayHelloGo(name)); return result; }
C コードでは、SayHello 関数の C インターフェイスを実装します。 _Go_SayHello 関数が呼び出されます。この関数は CGo によって自動的に生成され、Go コードで直接 SayHello 関数を呼び出すことができます。ここで、CGo によって生成された関数の名前は、_Go_ に Go 関数の名前を加えたものであることに注意してください。
次のコマンドを実行して、対応する .so ファイルを生成します:
$ go build -o main.so -buildmode=c-shared main.go
import ctypes lib = ctypes.cdll.LoadLibrary('./main.so') # 指定函数返回类型 lib.SayHello.argtypes = [ctypes.c_char_p] lib.SayHello.restype = ctypes.c_char_p # 调用函数 result = lib.SayHello(b'World') print(result.decode())
Python では、ctypes モジュールを使用して、C インターフェイスでカプセル化された .so ライブラリを読み込み、SayHello 関数のパラメーターの型と戻り値の型を指定します。次に、この関数を呼び出して文字列パラメータ「World」を渡すと、出力結果は「Hello, World!」になります。
上記のコード例は、Python で Golang コードを使用する方法を示しています。
まとめ: 以上が golang で Python を使用するための方法と手順であり、これらのスキルを習得することで、複雑なデータ処理、Web クローラー、機械学習などのタスクを迅速に完了し、開発効率を向上させることができます。
以上がGolangでPythonを使う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。