知识点:
Go与cgo
本课内容:
大家好,欢迎来到谷雨课堂
C/C++经过将近半个世纪年的发展,
没错,已经几十年了!
已经积累了庞大的软件资源和经验,
它们很多久经考验而且性能已经足够优化。
Go语言必须能够站在C/C++这个巨人的肩膀之上,
有了海量的C/C++软件资产兜底之后,
我们才可以放心愉快地用Go语言编程。
C语言作为一个通用语言,
很多库会选择提供一个C兼容的API,
然后用其他不同的编程语言实现。
Go语言通过自带的一个叫CGO的工具来支持C语言函数调用,
同时我们可以用Go语言导出C动态库接口给其他语言使用。
以下是使用CGo使用的示例:
//Go与cgo
package 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/
免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。