Rust与Go互操作性解析: cgo工具在Go中运行Rust代码实践
// Rust代码,在lib.rs文件中
#[no_mangle]
pub extern "C" fn double_input(input: i32) -> i32 {
input * 2
}
// 构建Rust库的命令
// 在Rust项目目录中执行:
// cargo build --release
// Go代码,在main.go文件中
package main
/*
#cgo LDFLAGS: -L${SRCDIR}/target/release -lmy_rust_library -lstdc++
#include <stdlib.h>
extern int double_input(int input);
static int double_input_wrapper(void *arg) {
int input = *(int*)arg;
return double_input(input);
}
*/
import "C"
import (
"fmt"
"unsafe"
)
func main() {
input := 10
result := C.double_input_wrapper(unsafe.Pointer(&input))
fmt.Printf("Result from Rust: %d\n", result)
}
// 构建Go程序的命令
// 在Go项目目录中执行:
// go build
// 运行Go程序
// ./my_go_program
这个代码示例展示了如何在Go程序中调用一个使用Rust编写的函数。首先,在Rust中定义了一个函数double_input
,该函数接收一个整数输入并返回其两倍。然后,在Go中,我们使用cgo特性定义了相应的外部函数声明和包装器,以便能够正确地调用Rust函数。在实际使用时,你需要确保Rust库已经被正确编译并且Go程序知道从哪里链接这个库。
评论已关闭