CgoCgo#cgoCFLAGSLDFLAGS
hi()
package main

import "fmt"

/*
#include <stdio.h>

void hi() {
    printf("hello world!\n");
}
*/
import "C" //这里可看作封装的伪包C, 这条语句要紧挨着上面的注释块,不可在它俩之间间隔空行!

func main() {
    C.hi()
    fmt.Println("Hi, vim-go")
}

运行结果:

root@slave2:/home/cgo# go run main.go 
hello world!
Hi, vim-go
Cgo
/*
 * hi.c
 * created on: July 1, 2017
 *      author: mark
 */

#include <stdio.h>

void hi() {
    printf("Hello Cgo!\n");
}

h文件

void hi();

编译成动态库.so

root@slave2:/home/cgo# gcc -c -fPIC -o hi.o hi.c
root@slave2:/home/cgo# gcc -shared -o libhi.so hi.o

Go文件

package main

import "fmt"

/*
#cgo CFLAGS: -I./
#cgo LDFLAGS: -L./ -lhi
#include "hi.h" //非标准c头文件,所以用引号
*/
import "C"

func main() {
    C.hi()
    fmt.Println("Hi, vim-go")
}
CFLAGS-I.hLDFLAGS-L-llibhi.so-lhilibhi.solib.so
root@slave2:/home/cgo# go run main.go 
Hello Cgo!
Hi, vim-go
cgopk-config.so.so.so