Skip to content

Latest commit

 

History

History
50 lines (38 loc) · 1.22 KB

cgo.md

File metadata and controls

50 lines (38 loc) · 1.22 KB

动态插件,cgo等go可引入的其它插件系统

go使用动态库

通过plugin包,可以将动态外库打包进程序里,而不是非要使用静态链库。

go使用c语言的代码

  • cgo:将c代码嵌入到go代码中,
  • 或者将c代码嵌入到go的源代码中,一个写到go文件中,一个单独的.c存在

常见的用法是将c代码嵌入到go的代码中:

package main

/*
#include <stdio.h>

void print(){
	printf("hello 科科人神");
}
*/
import "C"

func main() {
	C.print()
}

导入的c代码必须使用 /**/注释起来,并且,必须显示的import "C" 才可以。C是大写。

还可以将c文件引入到go中:

package main
/*
#include "hello.h"
*/
import "C"
func main() {
	C.hello()
}

同一个路径下有个 hello.h

除此之外还可以使用静态库和动态库的方式引入c语言的文件

元编程

意思就是将代码看成数据,代码在执行过程中也是可以改变,更新,删除等特性的

常见的 反射 其实就是元编程的一种,它提供给我们在运行时改变代码的能力

除此之外,go还提供了编译器改变代码的能力:go generate