Satu tugas biasa apabila bekerja dengan berbilang bahasa dalam projek ialah keupayaan untuk menggunakan fungsi daripada satu bahasa dalam bahasa lain. Dalam kes ini, kami sedang meneroka cara memanggil fungsi Python daripada program Go dan mendapatkan semula nilai pulangannya.
Dalam percubaan awal, kod Go berikut ialah used:
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("python", "-c", fmt.Sprintf("'import pythonfile; print pythonfile.cat_strings(\"%s\", \"%s\")'", "foo", "bar")) out, err := cmd.CombinedOutput() if err != nil { fmt.Println(err) return } fmt.Println(string(out)) }
Walau bagaimanapun, pendekatan ini menghadapi isu di mana nilai pulangan daripada fungsi Python tidak ditangkap dalam program Go. Output menunjukkan rentetan kosong, " ".
Masalah timbul kerana cara arahan Python diformatkan. Petikan yang mengelilingi perintah itu sendiri membawa kepada penterjemah Python yang menganggap perintah itu sebagai rentetan tunggal dan bukannya senarai argumen.
Untuk menyelesaikan isu itu, petikan yang mengelilingi arahan itu ialah dikeluarkan. Kod Go berikut menunjukkan penyelesaiannya:
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("python", "-c", "import pythonfile; print pythonfile.cat_strings('foo', 'bar')") out, err := cmd.CombinedOutput() if err != nil { fmt.Println(err) return } fmt.Println(string(out)) }
Dengan mengalih keluar petikan, arahan kini dilaksanakan seperti yang dimaksudkan dan nilai pulangan daripada fungsi Python boleh ditangkap dengan betul dalam program Go.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Berjaya Mendapatkan Nilai Pulangan daripada Fungsi Python yang Dipanggil oleh Program Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!