1.cgo的看法
go语言是一门比较新的语言,和C类语言的比较的亲和。前几年,其开源项目有点少,虽然go语言有很多优点,但是很多人都是抱着观望的态度去看待go。在没有很多开源项目的支持下,只能有cgo来接入原有羡慕中的一些模块(一般不会去用go语言重写,毕竟成本有点高)。
首先需要了解一些基本的go语言底层知识,就是go语言在进行syscall的时候会将goroutin所在的线程M上其他的G都移到其他的M上。然后进行C底层的系统调用。这样的话如果该syscall阻塞的话不会影响到其他的G。同样的,在使用CGO的时候也是会有类似的现象,在CGO返回前对应的G占用一个M。故可以把CGO中C函数看做在一个线程中执行。
CGO的用法
1、在使用CGO的时候C代码写的部分都要在注释里边,然后最后一行注释的下一行加上impourt “C”
package main
//#include <stdio.h>
import "C"
func main() {
C.printf("hello world\n")
return
}
2、C使用go语言中的变量。
go的标准类型转换为C的标准类型有
C.c