CodeBlanks Logo Icon CodeBlanks

cgo nedir?

  • Go kursu
  • İleri seviye
  • Ders 13/68
  • 4 dk

cgo ile C kodu çağırma yeteneğini öğrenirsin.

cgo nedir?

cgo, Go programından C fonksiyonlarını çağırmanı sağlayan araçtır. import "C" satırının hemen üstündeki yorum bloğu C kodu olarak derlenir ve içindeki fonksiyonlara C.ad ile ulaşırsın.

/*
int topla(int a, int b) { return a + b; }
*/
import "C"

fmt.Println(C.topla(2, 3))  // 5

SQLite, OpenSSL gibi olgun C kütüphanelerini Go'dan kullanmanın yolu budur.

cgo'nun bedeli

cgo çağrıları normal Go çağrılarından çok daha pahalıdır (yaklaşık onlarca nanosaniye ek yük). Ayrıca çapraz derleme zorlaşır ve tek parça statik ikili üretmek güçleşir. Bu yüzden sık söylenen söz: "cgo is not Go". Saf Go alternatifi varsa (ör. modernc.org/sqlite) önce o düşünülür.

Uygulama C fonksiyonu çağır

Önsöz yorumunda int kare(int x) { return x * x; } tanımla. main içinde C.kare(7) sonucunu fmt.Println ile yazdır.

Başlangıç kodu

main.go
package main

/*
// C kodu buraya
*/
import "C"

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

/*
int kare(int x) { return x * x; }
*/
import "C"

import "fmt"

func main() {
    fmt.Println(C.kare(7))
}

Beklenen çıktı

49

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 cgo kullanan bir paketi derlemek için ne gerekir?

  • Yalnızca Go derleyicisi
  • Bir Java sanal makinesi
  • Docker
  • Sistemde bir C derleyicisi (gcc/clang) Doğru cevap

Açıklama: cgo C kodunu derlemek için gcc veya clang çağırır; CGO_ENABLED=0 iken cgo kullanan dosyalar derlenmez.

2 C paketini içe aktar

Soru
/*
int iki() { return 2; }
*/
import "____"
Cevap
/*
int iki() { return 2; }
*/
import "C"

Açıklama: Özel "C" paketi, üstündeki yorumdaki C kodunu Go'ya açar.

3 cgo parçaları

Kavram Anlamı
import "C" cgo'yu etkinleştirir
Önsöz yorumu C kaynak kodu
C.topla C fonksiyonu çağrısı
CGO_ENABLED=0 cgo'yu kapatır

İleri seviye bölümündeki tüm dersler