Rumah > pembangunan bahagian belakang > Golang > Cara menggunakan ular sawa dalam golang

Cara menggunakan ular sawa dalam golang

PHPz
Lepaskan: 2023-04-21 14:54:42
asal
4025 orang telah melayarinya

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))
}
Salin selepas log masuk

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:

  1. Tulis fungsi Golang dalam fail main.go
package main

import "C"

// 导出函数
//export SayHello
func SayHello(name *C.char) *C.char {
    return C.CString("Hello, " + C.GoString(name) + "!")
}

func main() {}
Salin selepas log masuk
Salin selepas log masuk

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.

  1. Tulis atur cara yang memanggil fungsi Golang dalam python
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())
Salin selepas log masuk
Salin selepas log masuk

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:

  1. Tentukan fungsi Golang dalam fail main.go (sama seperti contoh sebelumnya)
package main

import "C"

// 导出函数
//export SayHello
func SayHello(name *C.char) *C.char {
    return C.CString("Hello, " + C.GoString(name) + "!")
}

func main() {}
Salin selepas log masuk
Salin selepas log masuk
  1. Isytihar fungsi Golang dalam fail main.h
#ifndef MAIN_H
#define MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

// 声明导出函数
char* SayHello(char*);

#ifdef __cplusplus
}
#endif

#endif
Salin selepas log masuk

Memandangkan modul Python tidak boleh merujuk terus fungsi Go, kita perlu lulus fungsi Go melalui pengkapsulan dan pengisytiharan Antara Muka C.

  1. Laksanakan antara muka C fungsi Golang dalam fail main.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;
}
Salin selepas log masuk

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.

  1. Kompilasi dan jana fail .so yang sepadan

Laksanakan arahan berikut untuk menjana fail .so yang sepadan:

$ go build -o main.so -buildmode=c-shared main.go
Salin selepas log masuk
  1. dalam Memanggil antara muka C terkapsul dalam Python
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())
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan