Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah CGO memperoleh pengecualian cuba dan tangkap apabila memanggil perpustakaan SO dinamik C++ dalam proses bahasa GO?
editor php Yuzai sedang membangunkan bahasa GO Jika anda ingin mencuba dan menangkap pengecualian apabila CGO memanggil perpustakaan SO dinamik C++, anda boleh mengambil beberapa kaedah. Pertama, anda boleh menggunakan fungsi setjmp dan longjmp dalam kod C++ untuk menangkap dan membuang pengecualian. Kemudian, gunakan pernyataan import "C" CGO dalam kod GO untuk mengimport fungsi C++ dan memanggilnya. Seterusnya, gunakan fungsi tangguh dan pulihkan dalam kod GO untuk menangkap pengecualian yang dilemparkan dalam kod C++ dan mengendalikannya. Melalui kaedah ini, cuba dan tangkap pengecualian boleh diperoleh apabila memanggil perpustakaan SO dinamik C++ dalam proses bahasa GO.
Saya sedang menulis program Go yang saya gunakan cgo
untuk memanggil perpustakaan dinamik (`.so) yang ditulis dalam C++ untuk mengendalikan protokol komunikasi. Kod dalam perpustakaan C++ ini mungkin membuang pengecualian, jadi saya menggunakan try-catch untuk menangkap pengecualian dalam kod perpustakaan dan menangguhkan untuk menangkap pengecualian ini dalam kod Go apabila memanggil fungsi C++ perpustakaan.
Tetapi ternyata apabila c++ cuba menangkap pengecualian, kod Go tidak dapat menangkap pengecualian.
Soalan saya ialah bagaimana untuk menangkap pengecualian C++ dalam kod Go yang dilemparkan oleh cgo
panggilan ke fungsi C++.
Tiada cara untuk melakukan ini secara langsung.
Buat pembalut C/C++ (anda boleh menulisnya "sebaris" dalam kod sumber Go dalam "komen" yang berkaitan dengan cgo
相关的“注释”中),该包装器将调用目标 C++ 函数,但会将调用包装在 try
/catch
块中,捕获所有内容(std::exception
) yang akan memanggil fungsi C++ sasaran, tetapi bungkus panggilan itu dengan try
/catch
menyekat, menangkap segala-galanya (std::exception
) dan menukar sebarang pengecualian yang ditangkap kepada nilai khas yang dikembalikan daripada panggilan.
Mendapati penjelasan yang baik a> tentang cara melakukan ini, dengan contoh.
Atas ialah kandungan terperinci Bagaimanakah CGO memperoleh pengecualian cuba dan tangkap apabila memanggil perpustakaan SO dinamik C++ dalam proses bahasa GO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!