什么是Cgo

简单的说,就是自C语言出现,已经累积了无数功能强大、性能卓越的C语言代码库,可以说难以替代;在现代编程语言中,如何方便快捷的使用这些C语言库,成了它们一个必须重视的话题。

就连JAVA这个重视面向对象的语言也提供了JNI机制以调用C语言库;

所以,Go语言也支持了这一功能,就是Cgo。

来看一段Cgo的hello world:

package main
/*
#include <stdio.h>
void hello() {
 printf("Hello world !");
}
*/
import "C"

func main() {
	C.hello()
}

小伙子,看完这段代码,你是否有很多问号???

  • 这个大写的C包是什么?
  • 为什么import前面有一段C语言代码,还被写在注释里?

实际上,根本不存在一个名为C的包,这个import "C"语句其实是告诉Cgo该起床工作了;做什么呢,就是将import "C"前的那段C语言代码的注释生成包装性质的Go代码。

编译Cgo程序

编译Cgo程序非常simple,将他当成普通Go程序编译就好了;因为在构建过成中Go工具集能自动识别和处理带有Cgo代码的Go源代码文件。

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/what-is-cgo.html

分类: 计算机技术
推荐阅读:
Pyside6.QtWidgets.QApplication详细教程 PySide6.QtWidgets.QApplication类用于管理GUI应用程序的控制流和主要设置;
Python delattr()函数 在Python中,delattr()函数用于删除对象的属性。它接受两个参数:第一个参数是要删除属性的对象,第二个参数是要删除的属性的名称。如果对象中不存在指定的属性,将会抛出AttributeError异常。
Python 多线程的运用 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。
在Rust中如何申请堆内存 在Rust中,可以使用 Box 关键字来在堆上分配内存。Box 是一个智能指针类型,它提供了所有权转移语义,可以将其值分配到堆上,然后通过变量引用进行访问。
Python里with语句的用法与技巧 本文将详细讲解Python语言中with语句的用法,以及如何让自定义的类也支持with语句;
Python使用莱布尼茨公式计算圆周率 可以通过莱布尼茨级数的求和来逼近圆周率;公式为:π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ......(无限项)