[go idioma] 5.2.1 Conceitos básicos de CGO

Na linguagem Go, o CGO permite que programas Go chamem diretamente o código da linguagem C. Isso é conseguido vinculando os binários das linguagens Go e C. Dessa forma, os programas Go podem usar bibliotecas C ou código C onde o desempenho é crítico.

Introdução de CGOs

Para usar o CGO em um programa Go, você precisa importar o pacote “C”:

import "C"

O pacote "C" é um pacote especial que realmente não existe na biblioteca padrão do Go. Quando o compilador vê esta instrução de importação, ele inicia o CGO.

Incorporação de código de linguagem C

Depois de importar "C", você pode incorporar o código da linguagem C nos comentários. Este código da linguagem C será extraído pelo compilador em tempo de compilação e depois vinculado ao código Go.

Por exemplo, você pode incorporar uma função C como esta:

/*
#include <stdio.h>

void myprint(char* s) {
    printf("%s\n", s);
}
*/
import "C"

Este código incorpora uma função C  myprint que pega um parâmetro de string e o imprime.

Chamada de função em linguagem C

As funções incorporadas da linguagem C podem ser chamadas como funções Go normais. Por exemplo, você pode chamar  myprint uma função como esta:

func main() {
    
    
    C.myprint(C.CString("Hello, CGO"))
}

Observe que temos que usar  C.CString uma função para converter uma string Go em uma string C, porque a representação na memória de uma string C e de uma string Go é diferente.

Links para a biblioteca da linguagem C

O CGO também permite vincular bibliotecas em linguagem C. Por exemplo, você pode vincular a biblioteca C padrão  libc:

/*
#cgo LDFLAGS: -lc
#include <stdio.h>
*/
import "C"

#cgo LDFLAGS: -lc diretiva diz ao compilador para vincular  libc a biblioteca. Então, você pode chamar  libc funções na biblioteca.

No geral, CGO é uma ferramenta poderosa que permite que programas Go chamem diretamente o código C. Porém, você precisa estar ciente de que o uso do CGO aumentará o tempo de compilação e também tornará o programa menos portável. Portanto, o CGO deve ser evitado, a menos que seja necessário.

Supongo que te gusta

Origin blog.csdn.net/u010671061/article/details/132310893
Recomendado
Clasificación