Golang dan Python ialah dua bahasa pengaturcaraan yang sangat popular, kedua-duanya mempunyai pelbagai senario aplikasi. Dalam sesetengah kes, kita perlu menggunakan kedua-dua bahasa ini untuk menyelesaikan tugasan tertentu bersama-sama, jadi bagaimana untuk menggunakan Python untuk membantu pengaturcaraan Golang? Artikel ini akan menerangkan secara terperinci cara Golang menggunakan Python.
1 Mengapa anda perlu menggunakan Python untuk membantu pengaturcaraan Golang
Dalam proses pembangunan Golang, kadangkala anda perlu menggunakan Python untuk mengendalikan tugas tertentu, seperti analisis data, pembelajaran mesin dan perangkak web menunggu. Walaupun tugasan ini juga boleh diselesaikan dalam Golang, Python digunakan secara meluas dan lebih matang dalam bidang ini, jadi menggunakan Python boleh menyelesaikan tugasan ini dengan lebih cepat dan lebih mudah.
2. Cara golang memanggil program python
Dalam Golang, kita boleh melaksanakan program Python melalui fungsi Exec dalam pakej os Contoh kod adalah seperti berikut:
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)) }
Dalam kod di atas, kami menggunakan fungsi Perintah dalam pakej exec untuk mencipta arahan untuk melaksanakan program Python. Antaranya, parameter pertama ialah nama program yang akan dilaksanakan, dan parameter kedua ialah parameter yang dihantar kepada program. Dalam contoh ini, kami sedang melaksanakan program test.py dan menghantar dua parameter arg1 dan arg2.
Gunakan kaedah CombinedOutput untuk memulakan arahan dan melaksanakan program Nilai pulangan ialah hasil output program dan mesej ralat semasa pelaksanaan. Jika ralat berlaku, pembolehubah err diberikan nilai, jika tidak pembolehubah keluar mengandungi output program.
Skrip Python test.py digunakan dalam kod sampel Dalam bab berikut, kami akan menerangkan secara terperinci cara menulis program Python.
3. Cara Python berinteraksi dengan Golang
Selain melaksanakan program Python melalui baris arahan, kami juga boleh berinteraksi dengan Golang melalui perpustakaan standard Python. Python menyediakan beberapa modul, seperti ctypes dan cffi, untuk memanggil antara muka bahasa C Golang dalam Python untuk mencapai komunikasi antara keduanya.
Berikut ialah contoh kod ringkas yang menunjukkan cara memanggil fungsi Golang dalam Python dan mengembalikan hasilnya:
package main import "C" // 导出函数 //export SayHello func SayHello(name *C.char) *C.char { return C.CString("Hello, " + C.GoString(name) + "!") } func main() {}
Di Golang, kami mentakrifkan fungsi SayHello, yang menerima parameter rentetan dan mengembalikan rentetan, yang menggunakan fungsi C.CString dan C.GoString bahasa CGo untuk penukaran jenis.
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())
Dalam Python, kami menggunakan modul ctypes untuk memuatkan pustaka main.so yang disusun dan nyatakan Parameter jenis dan jenis nilai pulangan bagi fungsi SayHello ditentukan. Kemudian dengan memanggil fungsi ini, menghantar parameter rentetan "World", hasil output ialah "Hello, World!".
Contoh kod di atas menunjukkan cara memanggil fungsi Golang dalam Python dan mengembalikan hasilnya.
4. Cara menggunakan kod Golang dalam program Python
Kita juga boleh menggunakan kod Golang dalam program Python dan mendapatkan hasil keluaran program Golang. Untuk melakukan ini, kita perlu menggunakan antara muka kod C bahasa CGo untuk merangkum fungsi Golang ke dalam fungsi C, dan kemudian memanggil fungsi C melalui modul ctypes Python.
Berikut ialah contoh kod mudah yang menunjukkan cara menggunakan kod Golang dalam Python:
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
Memandangkan modul Python tidak boleh merujuk terus fungsi Go, kita perlu lulus fungsi Go melalui pengkapsulan dan pengisytiharan Antara Muka 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; }
Dalam kod C, kami melaksanakan antara muka C fungsi SayHello. Fungsi _Go_SayHello dipanggil, yang dijana secara automatik oleh CGo dan boleh memanggil terus fungsi SayHello dalam kod Go. Perlu diingatkan di sini bahawa fungsi yang dihasilkan oleh CGo dinamakan _Go_ ditambah dengan nama fungsi Go.
Laksanakan arahan berikut untuk menjana fail .so yang sepadan:
$ 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())
Dalam Python, kami menggunakan modul ctypes untuk memuatkan perpustakaan .so yang dikapsulkan dengan antara muka C, dan nyatakan jenis parameter dan nilai pulangan bagi Jenis fungsi SayHello. Kemudian dengan memanggil fungsi ini, menghantar parameter rentetan "World", hasil output ialah "Hello, World!".
Contoh kod di atas menunjukkan cara menggunakan kod Golang dalam Python.
Ringkasan: Di atas ialah kaedah dan langkah cara menggunakan ular sawa dalam golang Dengan menguasai kemahiran ini, anda boleh menyelesaikan pemprosesan data yang kompleks, merangkak web, pembelajaran mesin dan tugasan lain serta meningkatkan kecekapan pembangunan.
Atas ialah kandungan terperinci Cara menggunakan ular sawa dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!