go怎么调用自己用c/c++写的so中的方法直接调用so的函数cgo应该绕不开吧go语言能调c么,我写过一个银行的应用程序调用其特色业务接口,因为接口只支持c和java,我就封装go语言能调c么了一个c的so,然后用cgo调用后写了一个RPC供远程的go语言调用,因为RPC只负责信息交互不负责业务逻辑,所以写了不到百行,以后基本不用再改 。记住虽然go语言自带gc,但cgo还是要手工释放内存哦 。
go语言能取代C语言吗?不能吧,现在用C语言搞开发都是用在更加底层的开发中 , 更加底层的开发需要高运行效率,go语言的运行效率是比不上C语言的,所以go语言在这些方面还无法取代C语言 。应该说是各有所长吧,go和C都有它们自己的适用环境,谁也不能取代谁 。
go语言如何调用c函数直接嵌入c源代码到go代码里面
package main
/*
#include stdio.h
void myhello(int i) {
printf("Hello C: %d\n", i);
}
*/
import "C"
import "fmt"
func main() {
C.myhello(C.int(12))
fmt.Println("Hello Go");
}
需要注意的是C代码必须放在注释里面
import "C"语句和前面的C代码之间不能有空行
运行结果
$ go build main.go./main
Hello C: 12
Hello Go
分开c代码到单独文件
嵌在一起代码结构不是很好看,很多人包括我,还是喜欢把两个分开,放在不同的文件里面,显得干净,go源文件里面是go的源代码 , c源文件里面是c的源代码 。
$ ls
hello.chello.hmain.go
$ cat hello.h
void hello(int);
$ cat hello.c
#include stdio.h
void hello(int i) {
printf("Hello C: %d\n", i);
}
$ cat main.go
package main
// #include "hello.h"
import "C"
import "fmt"
func main() {
C.hello(C.int(12))
fmt.Println("Hello Go");
}
编译运行
$ go build./main
Hello C: 12
Hello Go
编译成库文件
如果c文件比较多,最好还是能够编译成一个独立的库文件 , 然后go来调用库 。
$ find mylib main
mylib
【go语言能调c么 go语言bufio】mylib/hello.h
mylib/hello.c
main
main/main.go
编译库文件
$ cd mylib
# gcc -fPIC -shared -o libhello.so hello.c
编译go程序
$ cd main
$ cat main.go
package main
// #cgo CFLAGS: -I../mylib
// #cgo LDFLAGS: -L../mylib -lhello
// #include "hello.h"
import "C"
import "fmt"
func main() {
C.hello(C.int(12))
fmt.Println("Hello Go");
}
$ go build main.go
运行
$ export LD_LIBRARY_PATH=../mylib
$ ./main
Hello C: 12
Hello Go
在我们的例子中,库文件是编译成动态库的,main程序链接的时候也是采用的动态库
$ ldd main
linux-vdso.so.1 =(0x00007fffc7968000)
libhello.so = ../mylib/libhello.so (0x00007f513684c000)
libpthread.so.0 = /lib64/libpthread.so.0 (0x00007f5136614000)
libc.so.6 = /lib64/libc.so.6 (0x00007f5136253000)
/lib64/ld-linux-x86-64.so.2 (0x000055d819227000)
理论上讲也是可以编译成整个一静态链接的可执行程序,由于我的机器上缺少静态链接的系统库,比如libc.a,所以只能编译成动态链接 。
Go语言可能会代替C语言吗不可能 。Go到目前为止,其本身就是用C写的 。只是在语言层面实现了一些如果用C会很难写的feature,比如goroutine 。在1.5版本中,Go会bootstraping , 用Go来编译自己 。
C语言,几乎每种操作系统的系统调用都是C , C最大的作用就是用来实现新的语言 。
go语言能调c么的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于go语言bufio、go语言能调c么的信息别忘了在本站进行查找喔 。
推荐阅读
- 低价营销如何盈利,低价商品如何营销
- 国产chatGPT概念股,CHATGPT概念股什么意思
- 公众号内测码怎么弄,公众号内测码怎么弄出来
- 我的世界有电脑了怎么联机,电脑我的世界怎样联机
- go语言的类 go语言例子
- 步步高s2什么cpu好,步步高s2是哪年生产的
- 东莞网站制作ppt,东莞网站制作和推广
- 广告直播图片高清素材,直播间广告图
- c语言获取毫秒级时间函数 c获取毫秒级的时间