中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

go語言能調(diào)c么 go語言chan

go語言如何調(diào)用c函數(shù)

直接嵌入c源代碼到go代碼里面

創(chuàng)新互聯(lián)主營禹州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機APP定制開發(fā),禹州h5重慶小程序開發(fā)公司搭建,禹州網(wǎng)站營銷推廣歡迎禹州等地區(qū)企業(yè)咨詢

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代碼之間不能有空行

運行結(jié)果

$ go build main.go ./main

Hello C: 12

Hello Go

分開c代碼到單獨文件

嵌在一起代碼結(jié)構(gòu)不是很好看,很多人包括我,還是喜歡把兩個分開,放在不同的文件里面,顯得干凈,go源文件里面是go的源代碼,c源文件里面是c的源代碼。

$ ls

hello.c hello.h main.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來調(diào)用庫。

$ find mylib main

mylib

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

在我們的例子中,庫文件是編譯成動態(tài)庫的,main程序鏈接的時候也是采用的動態(tài)庫

$ 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)

理論上講也是可以編譯成整個一靜態(tài)鏈接的可執(zhí)行程序,由于我的機器上缺少靜態(tài)鏈接的系統(tǒng)庫,比如libc.a,所以只能編譯成動態(tài)鏈接。

Go語言可能會代替C語言嗎

不可能。Go到目前為止,其本身就是用C寫的。只是在語言層面實現(xiàn)了一些如果用C會很難寫的feature,比如goroutine。在1.5版本中,Go會bootstraping,用Go來編譯自己。

C語言,幾乎每種操作系統(tǒng)的系統(tǒng)調(diào)用都是C,C最大的作用就是用來實現(xiàn)新的語言。

go怎么調(diào)用自己用c/c++寫的so中的方法

直接調(diào)用so的函數(shù)cgo應(yīng)該繞不開吧,我寫過一個銀行的應(yīng)用程序調(diào)用其特色業(yè)務(wù)接口,因為接口只支持c和java,我就封裝了一個c的so,然后用cgo調(diào)用后寫了一個RPC供遠程的go語言調(diào)用,因為RPC只負責信息交互不負責業(yè)務(wù)邏輯,所以寫了不到百行,以后基本不用再改。記住雖然go語言自帶gc,但cgo還是要手工釋放內(nèi)存哦。

go語言能取代C語言嗎?

不能吧,現(xiàn)在用C語言搞開發(fā)都是用在更加底層的開發(fā)中,更加底層的開發(fā)需要高運行效率,go語言的運行效率是比不上C語言的,所以go語言在這些方面還無法取代C語言。應(yīng)該說是各有所長吧,go和C都有它們自己的適用環(huán)境,誰也不能取代誰。

新聞名稱:go語言能調(diào)c么 go語言chan
分享URL:http://www.rwnh.cn/article4/dopphie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、網(wǎng)站收錄關(guān)鍵詞優(yōu)化動態(tài)網(wǎng)站、電子商務(wù)、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計
平南县| 白朗县| 巧家县| 周至县| 海宁市| 西和县| 普兰县| 冕宁县| 崇信县| 连江县| 留坝县| 黎平县| 临潭县| 大石桥市| 扶余县| 郎溪县| 彝良县| 牟定县| 会昌县| 沙洋县| 汶川县| 乌兰察布市| 凤凰县| 阳曲县| 上虞市| 广安市| 周至县| 达孜县| 广饶县| 高密市| 保靖县| 田阳县| 高淳县| 都兰县| 井研县| 肇州县| 盘锦市| 宁德市| 二连浩特市| 永州市| 连山|