Maison  >  Article  >  développement back-end  >  Qu'est-ce que Golang Cgo

Qu'est-ce que Golang Cgo

(*-*)浩
(*-*)浩original
2019-12-03 09:20:034272parcourir

Qu'est-ce que Golang Cgo

CGO fournit un mécanisme permettant au golang et au langage C de s'appeler. Certaines bibliothèques tierces peuvent n'avoir que des implémentations C/C++, et les implémenter entièrement en Golang pur peut être un projet énorme. C'est là que CGO s'avère utile.               (Apprentissage recommandé : go)

peut appeler l'interface C en Golang via CGO L'interface C++ peut être empaquetée en C et fournie à Golang pour l'appel.

Le code C appelé peut être fourni directement sous forme de code source ou conditionné sous forme de bibliothèque statique ou de bibliothèque dynamique à lier au moment de la compilation. Il est recommandé d'utiliser des bibliothèques statiques, ce qui facilite l'isolation du code. Le binaire compilé n'a pas de dépendances de bibliothèque dynamiques et est pratique pour la publication. Il est également conforme à la philosophie de Golang.

Cet article ne couvrira pas les tutoriels spécifiques sur la façon d'utiliser CGO. Ici, nous introduisons principalement quelques détails pour éviter les pièges lors de l'utilisation de CGO.

Passage de paramètres

Type numérique de base

Le modèle de mémoire de type numérique de base de Golang est le même que le langage C, qui est continu Plusieurs octets (1/2/4/8 octets).

Ainsi, lorsque vous passez un type numérique, vous pouvez directement convertir le type numérique de base de Golang en type CGO correspondant, puis le transmettre à l'appel de fonction C, et vice versa :

package main

/*
#include <stdint.h>

static int32_t add(int32_t a, int32_t b) {
    return a + b;
}
*/
import "C"
import "fmt"

func main() {
    var a, b int32 = 1, 2
    var c int32 = int32(C.add(C.int32_t(a), C.int32_t(b)))
    fmt.Println(c) // 3
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn