Home > Article > Backend Development > How does CGO obtain try and catch exceptions when calling the C++ dynamic SO library in the GO language process?
php editor Yuzai is developing the GO language. If you want to get try and catch exceptions when CGO calls the C dynamic SO library, you can take some methods. First, you can use the setjmp and longjmp functions in C code to catch and throw exceptions. Then, use CGO's import "C" statement in the GO code to import the C function and call it. Next, use the defer and recover functions in the GO code to capture the exceptions thrown in the C code and handle them. Through these methods, try and catch exceptions can be obtained when calling the C dynamic SO library in the GO language process.
I am writing a Go program, in which I use cgo
to call a dynamic library (`.so) written in C to handle communication protocol. The code in this C library may throw exceptions, so I use try-catch to catch exceptions in the library code, and defer to catch these exceptions in the Go code when calling the library's C functions.
But it turns out that when c tries to catch the exception, the Go code cannot catch the exception.
My question is how to catch a C exception in Go code that is thrown by a cgo
call to a C function.
This operation cannot be performed directly.
Create a C/C wrapper (you can write it "inline" in the Go source code in a "comment" related to cgo
) that will call an objective C function, But will wrap the call in a try
/catch
block, catch everything (std::exception
) and convert any caught exceptions to be returned from the call special value.
Found a good explanation a> of how to do this, with examples.
The above is the detailed content of How does CGO obtain try and catch exceptions when calling the C++ dynamic SO library in the GO language process?. For more information, please follow other related articles on the PHP Chinese website!