Flutter 通过FFI调用Go 的代码示范

7 min read

下面是一个简单的示例,展示了如何使用Flutter和Go结合使用FFI调用Go代码。

Flutter端:

1.首先,我们需要在Flutter项目的pubspec.yaml文件中,添加以下依赖项:

dependencies:
  ffi: ^0.1.3

2.在Dart代码中,导入“dart:ffi”库,然后定义一个Dart接口,以便将其绑定到Go代码:

import 'dart:ffi';

typedef AddFunc = Int32 Function(Int32 a, Int32 b);
typedef add_func = int Function(int a, int b);

3.接下来,我们需要加载Go动态库,然后将其绑定到Dart接口中:

final DynamicLibrary goLibrary = Platform.isAndroid
    ? DynamicLibrary.open("libgo.so")
    : DynamicLibrary.process();

final add_func goAdd =
    goLibrary.lookup<NativeFunction<AddFunc>>("Add").asFunction();

4.现在,我们可以使用这个goAdd函数来调用Go代码了:

int a = 2;
int b = 3;
int result = goAdd(a, b);
print("Result: $result"); // 输出: Result: 5

Go端:

1.首先,我们需要创建一个Go模块,并导出一个可以被外部调用的函数:

package main

import "C"

//export Add
func Add(a, b int32) int32 {
    return a + b
}

func main() {}

2.接下来,我们需要使用Go的命令行工具,将Go模块编译成一个动态库:

GOOS=linux GOARCH=amd64 go build -o libgo.so -buildmode c-shared main.go

3.现在,我们可以在Flutter项目中使用这个动态库了。将它放在Flutter项目的"android/app/src/main/jniLibs"目录下即可。

这个示例只是一个简单的例子,展示了如何使用Flutter和Go结合使用FFI调用Go代码。更复杂的示例需要更多的Go和Flutter代码。