Home  >  Article  >  Backend Development  >  How does CGO obtain try and catch exceptions when calling the C++ dynamic SO library in the GO language process?

How does CGO obtain try and catch exceptions when calling the C++ dynamic SO library in the GO language process?

WBOY
WBOYforward
2024-02-11 15:20:09553browse

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.

Question content

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.

Solution

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!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete