亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

帶你了解CGO編程

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

快速入門

我們先通過一個(gè)簡(jiǎn)單的CGO程序來了解Go中的C

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

代碼通過 import "C" 語句啟用CGO特性,同時(shí)包含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語言字符串會(huì)導(dǎo)致內(nèi)存泄漏。但是對(duì)于這個(gè)小程序來說,這樣是沒有問題的,因?yàn)槌绦?退出后操作系統(tǒng)會(huì)自動(dòng)回收程序的所有資源。

CGO基礎(chǔ)

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

這個(gè)例子展示了cgo的基本使用方法。開頭的注釋中寫了要調(diào) 用的C函數(shù)和相關(guān)的頭文件,頭文件被include之后里面的所有 的C語言元素都會(huì)被加入到”C”這個(gè)虛擬的包中。需要注意的 是,import "C"導(dǎo)入語句需要單獨(dú)一行,不能與其他包一同 import。向C函數(shù)傳遞參數(shù)也很簡(jiǎn)單,就直接轉(zhuǎn)化成對(duì)應(yīng)C語言 類型傳遞就可以。

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

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

相關(guān)文章

  • Golang中panic的異常處理

    Golang中panic的異常處理

    本文主要介紹了Golang中panic的異常處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Golang常用包使用介紹

    Golang常用包使用介紹

    標(biāo)準(zhǔn)的Go語言代碼庫(kù)中包含了大量的包,并且在安裝Go的時(shí)候多數(shù)會(huì)自動(dòng)安裝到系統(tǒng)中。我們可以在$GOROOT/src/pkg目錄中查看這些包。下面簡(jiǎn)單介紹一些我們開發(fā)中常用的包
    2022-09-09
  • 詳解Go?語言如何通過測(cè)試保證質(zhì)量

    詳解Go?語言如何通過測(cè)試保證質(zhì)量

    這篇文章主要為大家介紹了Go?語言如何通過測(cè)試保證質(zhì)量詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • go實(shí)現(xiàn)腳本解釋器gscript

    go實(shí)現(xiàn)腳本解釋器gscript

    這篇文章主要為大家介紹了go實(shí)現(xiàn)腳本解釋器gscript示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 在Go語言項(xiàng)目中使用Zap日志庫(kù)的操作過程

    在Go語言項(xiàng)目中使用Zap日志庫(kù)的操作過程

    本文將先介紹Go語言原生的日志庫(kù)的使用,然后詳細(xì)介紹非常流行的Uber開源的zap日志庫(kù),同時(shí)會(huì)介紹如何搭配·Lumberjack·實(shí)現(xiàn)日志的切割和歸檔,對(duì)Go使用Zap日志庫(kù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2024-03-03
  • GO語言運(yùn)行環(huán)境下載、安裝、配置圖文教程

    GO語言運(yùn)行環(huán)境下載、安裝、配置圖文教程

    這篇文章主要介紹了GO語言運(yùn)行環(huán)境下載、安裝、配置圖文教程,需要的朋友可以參考下
    2017-02-02
  • Go語言rune與字符串轉(zhuǎn)換的密切關(guān)系解析

    Go語言rune與字符串轉(zhuǎn)換的密切關(guān)系解析

    這篇文章主要為大家介紹了Go語言rune與字符串轉(zhuǎn)換的密切關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • go使用errors.Wrapf()代替log.Error()方法示例

    go使用errors.Wrapf()代替log.Error()方法示例

    這篇文章主要為大家介紹了go使用errors.Wrapf()代替log.Error()的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Go語言實(shí)現(xiàn)UDP版聊天小工具的示例詳解

    Go語言實(shí)現(xiàn)UDP版聊天小工具的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Go語言實(shí)現(xiàn)聊天小工具(UDP版),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 聊聊golang的defer的使用

    聊聊golang的defer的使用

    這篇文章主要介紹了聊聊golang的defer的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論