该方法适用于linux环境下的调用,Windows环境syscall包下有相关的方法直接调用
最终目录结构:

1、编写mylib.go

package main

import "C"

//生成动态库: go build -buildmode=c-shared -o libmylib.so mylib.go

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

func main() {}

2、编写main.go

package main

// #cgo LDFLAGS: -L. -lmylib  //so文件名必须以lib开头,例如libmylib.so
// #include "libmylib.h"
import "C"

import "fmt"

func main() {
	sum := C.Add(1, 2)
	fmt.Println(sum)
}

执行生成动态库命令:

go build -buildmode=c-shared -o libmylib.so mylib.go

将动态库环境变量设置为当前工作环境(不然找到不so文件)

 export LD_LIBRARY_PATH=/home/qsj/GolandProjects/go_so

执行编译命令

go build -o main main.go 

运行

./main

输出:

3