CGO程式設計

R-B發表於2021-09-09

1)什麼是CGO程式設計?
2)CGO語法
3)相關資料

一、什麼是CGO程式設計?
簡單說就是GO語言程式碼中可以編寫C程式碼和呼叫C程式碼,在一些偏底層業務中,用C來編寫會比較簡單,然後GO中來呼叫

二、CGO語法
1)簡單案例
2)GO與C語言型別轉換
3)GO語言傳值到C語言

(1)簡單案例

package main/*
#include <stdio.h>
int a = 1;
char s[30] = "12345";
int fun1() {
    printf("hello cgo!n");
}
 */import "C"import "fmt"func main() {
    fmt.Println(C.a)
    fmt.Println(C.s)
    C.fun1()
}

輸出結果:1[49 50 51 52 53 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
hello cgo!

C程式碼在GO語言中嵌入在內,然後引入C程式碼,必須在緊接的下一行,不能有空行或其他程式碼,否則不能引入

/*
C程式碼
*/import "C"

然後GO中呼叫C程式碼的話,以C. + 變數名或函式名

(2)GO與C語言型別轉換

GO呼叫列印C變數型別:

package main/*
#include <stdio.h>
int a = 1;
float f = 1.2;
double d = 1.3;
char c = '1';
char s[30] = "12345";
 */import "C"import "fmt"func main() {
    fmt.Printf("int      %Tn", C.a)
    fmt.Printf("char     %Tn", C.c)
    fmt.Printf("char[30] %Tn", C.s)
    fmt.Printf("float    %Tn", C.f)
    fmt.Printf("double   %Tn", C.d)
}

輸出:int      main._Ctype_intchar     main._Ctype_charchar[30] [30]main._Ctype_charfloat    main._Ctype_floatdouble   main._Ctype_double

C -> GO

int,float,double,char型別變數可以直接強轉// 轉換 C 字串到 Golang 字串func C.GoString(*C.char) string// 轉換一定長度的 C 字串到 Golang 字串func C.GoStringN(*C.char, C.int) string// 對於C字串陣列變數,沒有辦法直接用C.GoString()和C.GoStringN()直接轉換,可以使用chart*替代字串陣列變數的使用

GO -> C

對於int,float,double,char可以直接強轉賦值char*使用C.CString()

3)GO語言傳值到C語言

package main
/*#include <stdio.h>int a = 1;float f = 1.2;
double d = 1.3;
char c = '1';
char* s = "12345";
int fun1(int a, char c, float f, double d,char *s) {    printf("%d %c %f %f %sn", a, c, f, d, s);
}
 */
import "C"func main() {
    C.fun1(1, 'a', 1.2, 1.5, C.CString("dsadsad"))
}



作者:laijh
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4560/viewspace-2819963/,如需轉載,請註明出處,否則將追究法律責任。

相關文章