2021-11-22 来源:华纳网 责任编辑:韩玉玲 人气:
核心提示:Go与cgo

知识点:

Go与cgo
 


 

本课内容:

大家好,欢迎来到谷雨课堂

 

C/C++经过将近半个世纪年的发展,

没错,已经几十年了!

已经积累了庞大的软件资源和经验,

它们很多久经考验而且性能已经足够优化。

Go语言必须能够站在C/C++这个巨人的肩膀之上,

有了海量的C/C++软件资产兜底之后,

我们才可以放心愉快地用Go语言编程。

C语言作为一个通用语言,

很多库会选择提供一个C兼容的API,

然后用其他不同的编程语言实现。

Go语言通过自带的一个叫CGO的工具来支持C语言函数调用,

同时我们可以用Go语言导出C动态库接口给其他语言使用。

 

以下是使用CGo使用的示例:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
//Go与cgopackage main
/*#include <stdio.h>
void print_str(char* s) {  printf("%s\n", s);}
void print_int(int v) {    printf("printint: %d\n", (v+6));}*/import "C"import ("fmt")
func main() {  v := 42  C.print_int(C.int(v))  cs := C.CString("Hello guyu\n")  C.print_str(cs)  fmt.Println()}

 

 

扩展阅读

 

golang 和 C 的基本数值类型转换对照表如下:

C语言类型 CGO类型 Go语言类型
char C.char byte
singed char C.schar int8
unsigned char C.uchar uint8
short C.short int16
unsigned short C.ushort uint16
int C.int int32
unsigned int C.uint uint32
long C.long int32
unsigned long C.ulong uint32
long long int C.longlong int64
unsigned long long int C.ulonglong uint64
float C.float float32
double C.double float64
size_t C.size_t uint

 

C语言类型 CGO类型 Go语言类型
int8_t C.int8_t int8
uint8_t C.uint8_t uint8
int16_t C.int16_t int16
uint16_t C.uint16_t uint16
int32_t C.int32_t int32
uint32_t C.uint32_t uint32
int64_t C.int64_t int64
uint64_t C.uint64_t uint64

 

完整的源代码可以登录【华纳网】下载。

https://www.worldwarner.com/




 





免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。