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)) // 5SQLite, 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
package main
/*
// C kodu buraya
*/
import "C"
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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
/*
int iki() { return 2; }
*/
import "____"
/*
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 |