最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

CGO編程基礎(chǔ)快速入門

 更新時間:2022年12月22日 15:36:45   作者:山與路  
這篇文章主要為大家介紹了CGO編程基礎(chǔ)快速入門示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

帶你了解CGO編程

大學(xué)時最開始學(xué)的語言莫過于C/C++,C/C++經(jīng)過幾十年的發(fā)展,已經(jīng)積累了龐大的軟件資產(chǎn),它們很多久經(jīng)考驗而且性能已經(jīng)足夠優(yōu)化。Go語言則是站在巨人的肩膀之上而誕生,go也自帶一個CGO的工具來支持C語言函數(shù)的調(diào)用,同時我們可以用GO語言導(dǎo)出C動態(tài)庫接口給其他語言使用

快速入門

我們先通過一個簡單的CGO程序來了解Go中的C

package main
import "C"
func main() {
	println("hello cgo")
}

代碼通過 import "C" 語句啟用CGO特性,同時包含C 語言的 頭文件。然后通過CGO包的 C.CString 函 數(shù)將Go語言字符串轉(zhuǎn)為C語言字符串,最后調(diào)用CGO包的 C.puts 函數(shù)向標(biāo)準(zhǔn)輸出窗口打印轉(zhuǎn)換后的C字符串。

相比“Hello, World 的革 命”一節(jié)中的CGO程序最大的不同是: 我們沒有在程序退出前釋放 C.CString 創(chuàng)建的C語言字符串; 還有我們改用 puts 函數(shù)直接向標(biāo)準(zhǔn)輸出打印,之前是采用fputs向標(biāo)準(zhǔn)輸出打印。

沒有釋放使用 C.CString 創(chuàng)建的C語言字符串會導(dǎo)致內(nèi)存泄漏。但是對于這個小程序來說,這樣是沒有問題的,因為程序 退出后操作系統(tǒng)會自動回收程序的所有資源。

CGO基礎(chǔ)

要使用CGO特性,需要安裝C/C++構(gòu)建工具鏈,在macOS和 Linux下是要安裝GCC,在windows下是需要安裝MinGW工具。同時需要保證環(huán)境變量 CGO_ENABLED 被設(shè)置為1,這表示 CGO是被啟用的狀態(tài)。在本地構(gòu)建時 CGO_ENABLED 默認是啟 用的,當(dāng)交叉構(gòu)建時CGO默認是禁止的。比如要交叉構(gòu)建 ARM環(huán)境運行的Go程序,需要手工設(shè)置好C/C++交叉構(gòu)建的 工具鏈,同時開啟 CGO_ENABLED 環(huán)境變量。然后通過 import "C" 語句啟用CGO特性。

import "C" 語句

如果在GO代碼中出現(xiàn) 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的基本使用方法。開頭的注釋中寫了要調(diào) 用的C函數(shù)和相關(guān)的頭文件,頭文件被include之后里面的所有 的C語言元素都會被加入到”C”這個虛擬的包中。需要注意的 是,import "C"導(dǎo)入語句需要單獨一行,不能與其他包一同 import。向C函數(shù)傳遞參數(shù)也很簡單,就直接轉(zhuǎn)化成對應(yīng)C語言 類型傳遞就可以。

cgo將當(dāng)前包引用的C語言符號都放到了虛擬的C包中,同時通過虛擬的C包導(dǎo)入的C語言符號并不需要是大寫字母開頭,它們不受Go語言的導(dǎo)出規(guī)則約束。 cgo將當(dāng)前包引用的C語言符號都放到了虛擬的C包中,同時當(dāng) 前包依賴的其它Go語言包內(nèi)部可能也通過cgo引入了相似的虛擬C包,但是不同的Go語言包引入的虛擬的C包之間的類型是不能通用的。這個約束對于要自己構(gòu)造一些cgo輔助函數(shù)時有可能會造成一點的影響。

以上就是CGO編程基礎(chǔ)快速入門的詳細內(nèi)容,更多關(guān)于CGO編程基礎(chǔ)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang實現(xiàn)支付寶沙箱支付的方法步驟

    Golang實現(xiàn)支付寶沙箱支付的方法步驟

    本文主要介紹了Golang實現(xiàn)支付寶沙箱支付的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • golang如何通過viper讀取config.yaml文件

    golang如何通過viper讀取config.yaml文件

    這篇文章主要介紹了golang通過viper讀取config.yaml文件,圍繞golang讀取config.yaml文件的相關(guān)資料展開詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • 一文詳解Go Http Server原理

    一文詳解Go Http Server原理

    這篇文章主要為大家介紹了Go Http Server原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Go語言中的閉包詳解

    Go語言中的閉包詳解

    本文詳細講解了Go語言中的閉包,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Go語言基礎(chǔ)Json序列化反序列化及文件讀寫示例詳解

    Go語言基礎(chǔ)Json序列化反序列化及文件讀寫示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)Json序列化反序列化以及文件讀寫的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Go語言:打造優(yōu)雅數(shù)據(jù)庫單元測試的實戰(zhàn)指南

    Go語言:打造優(yōu)雅數(shù)據(jù)庫單元測試的實戰(zhàn)指南

    Go語言數(shù)據(jù)庫單元測試入門:聚焦高效、可靠的數(shù)據(jù)庫代碼驗證!想要確保您的Go應(yīng)用數(shù)據(jù)層堅如磐石嗎?本指南將手把手教您如何利用Go進行數(shù)據(jù)庫單元測試,輕松揪出隱藏的bug,打造無懈可擊的數(shù)據(jù)處理邏輯,一起來探索吧!
    2024-01-01
  • Go語言轉(zhuǎn)換所有字符串為大寫或者小寫的方法

    Go語言轉(zhuǎn)換所有字符串為大寫或者小寫的方法

    這篇文章主要介紹了Go語言轉(zhuǎn)換所有字符串為大寫或者小寫的方法,實例分析了ToLower和ToUpper函數(shù)的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • GO 使用Webhook 實現(xiàn)github 自動化部署的方法

    GO 使用Webhook 實現(xiàn)github 自動化部署的方法

    這篇文章主要介紹了GO 使用Webhook 實現(xiàn)github 自動化部署的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Go官方工具鏈用法詳解

    Go官方工具鏈用法詳解

    Go官方工具鏈工具要求所有的Go源代碼文件必須以.go后綴結(jié)尾。這里,我們假設(shè)一個最簡單的Go程序放在hello.go的文件中,下面通過示例代碼給大家介紹Go官方工具鏈用法簡介,需要的朋友可以參考下
    2021-10-10
  • grpc-go如何通過context傳遞額外數(shù)據(jù)

    grpc-go如何通過context傳遞額外數(shù)據(jù)

    metadata是grpc內(nèi)置的,用RPC服務(wù)傳遞http頭數(shù)據(jù),分in和out兩種,對應(yīng)的key都為一個空struct,這篇文章主要介紹了grpc-go通過context傳遞額外數(shù)據(jù),需要的朋友可以參考下
    2024-02-02

最新評論

祁东县| 仁怀市| 定结县| 乌兰县| 平舆县| 遵义县| 黎川县| 五华县| 丽水市| 铁岭市| 通许县| 景洪市| 海林市| 阳山县| 湟源县| 白沙| 东山县| 林芝县| 巴马| 万源市| 军事| 晋城| 大邑县| 兰州市| 河南省| 北海市| 颍上县| 新源县| 宜州市| 奈曼旗| 黑水县| 翼城县| 疏附县| 滨州市| 榆林市| 铜鼓县| 佛坪县| 新平| 库尔勒市| 叙永县| 宁南县|