<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
大學時最開始學的語言莫過於C/C++,C/C++經過幾十年的發展,已經積累了龐大的軟體資產,它們很多久經考驗而且效能已經足夠優化。Go語言則是站在巨人的肩膀之上而誕生,go也自帶一個CGO的工具來支援C語言函數的呼叫,同時我們可以用GO語言匯出C動態庫介面給其他語言使用
我們先通過一個簡單的CGO程式來了解Go中的C
package main import "C" func main() { println("hello cgo") }
程式碼通過 import "C"
語句啟用CGO
特性,同時包含C 語言的 標頭檔案。然後通過CGO包的 C.CString 函 數將Go語言字串轉為C語言字串,最後呼叫CGO包的 C.puts 函數向標準輸出視窗列印轉換後的C字串。
相比“Hello, World 的革 命”一節中的CGO程式最大的不同是: 我們沒有在程式退出前釋放 C.CString
建立的C語言字串; 還有我們改用 puts
函數直接向標準輸出列印,之前是採用fputs
向標準輸出列印。
沒有釋放使用 C.CString
建立的C語言字串會導致記憶體漏失。但是對於這個小程式來說,這樣是沒有問題的,因為程式 退出後作業系統會自動回收程式的所有資源。
要使用CGO特性,需要安裝C/C++
構建工具鏈,在macOS和 Linux下是要安裝GCC
,在windows下是需要安裝MinGW
工具。同時需要保證環境變數 CGO_ENABLED
被設定為1,這表示 CGO是被啟用的狀態。在本地構建時 CGO_ENABLED 預設是啟 用的,當交叉構建時CGO預設是禁止的。比如要交叉構建 ARM環境執行的Go程式,需要手工設定好C/C++交叉構建的 工具鏈,同時開啟 CGO_ENABLED
環境變數。然後通過 import "C" 語句啟用CGO特性。
如果在GO程式碼中出現 import "C"
則該go檔案使用到了CGO特性,緊跟在這行語句前面的註釋是一種特殊語法,裡面包含正常的C語言程式碼
package main //#include <stdio.h> import "C" /* #include <stdio.h> void hello(){ printf("hello world!!! n"); } */ func main() { C.hello() }
這個例子展示了cgo的基本使用方法。開頭的註釋中寫了要調 用的C函數和相關的標頭檔案,標頭檔案被include之後裡面的所有 的C語言元素都會被加入到”C”這個虛擬的包中。需要注意的 是,import "C"匯入語句需要單獨一行,不能與其他包一同 import。向C函數傳遞引數也很簡單,就直接轉化成對應C語言 型別傳遞就可以。
cgo將當前包參照的C語言符號都放到了虛擬的C包中,同時通過虛擬的C包匯入的C語言符號並不需要是大寫字母開頭,它們不受Go語言的匯出規則約束。 cgo將當前包參照的C語言符號都放到了虛擬的C包中,同時當 前包依賴的其它Go語言套件內部可能也通過cgo引入了相似的虛擬C包,但是不同的Go語言套件引入的虛擬的C包之間的型別是不能通用的。這個約束對於要自己構造一些cgo輔助函數時有可能會造成一點的影響。
以上就是CGO程式設計基礎快速入門的詳細內容,更多關於CGO程式設計基礎的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45