Go Hile Sayfası
Son güncelleme
Hello World ve program yapısı
Her Go programı bir paket içinde yaşar; giriş noktası, package main içindeki func main'dir.
| İşlem | Söz dizimi |
|---|---|
| Paket bildirimi | package main |
| Bir paketi içe aktar | import "fmt" |
| Birden fazla paketi içe aktar | import (\n "fmt"\n "os"\n) |
| Giriş noktası | func main() { ... } |
| Bir satır yazdır | fmt.Println("Hello, World!") |
| Biçimlendirilmiş yazdırma | fmt.Printf("%d items\n", n) |
| Bir dosyayı çalıştır | go run main.go |
| Bir ikili dosya derle | go build |
Değişkenler ve tipler
Go statik tiplidir ama := ile tipleri çıkarabilir.
| İşlem | Söz dizimi |
|---|---|
| Tiple tanımla | var age int = 30 |
| Çıkarımla tanımla | var name = "Ada" |
| Kısa tanımlama | count := 0 |
| Aynı anda birden fazla | x, y := 1, 2 |
| Sabit | const Pi = 3.14 |
| Sıfır değerleri | 0, "", false, nil |
| Temel tipler | int, float64, string, bool, byte, rune |
| Tip dönüşümü | f := float64(i) |
Kontrol akışı
Go'nun tek bir döngü anahtar kelimesi vardır - for - ve koşulların etrafında parantez yoktur.
| İşlem | Söz dizimi |
|---|---|
| If / else | if x > 0 { ... } else { ... } |
| İlk değer ifadeli if | if v, ok := m[k]; ok { ... } |
| For döngüsü (C tarzı) | for i := 0; i < 10; i++ { ... } |
| While tarzı döngü | for x < 100 { ... } |
| Sonsuz döngü | for { ... } |
| Bir slice üzerinde range | for i, v := range items { ... } |
| Switch | switch day { case 1: ...; default: ... } |
| İfadesiz switch | switch { case x > 0: ... } |
| Break / continue | break, continue |
Fonksiyonlar
Fonksiyonlar birinci sınıf değerlerdir ve birden fazla sonuç döndürebilir.
| İşlem | Söz dizimi |
|---|---|
| Temel fonksiyon | func add(a int, b int) int { return a + b } |
| Ortak parametre tipi | func add(a, b int) int { ... } |
| Birden fazla geri dönüş değeri | func divmod(a, b int) (int, int) { return a / b, a % b } |
| Adlandırılmış geri dönüş değerleri | func split(sum int) (x, y int) { x = sum / 2; return } |
| Variadic fonksiyon | func sum(nums ...int) int { ... } |
| Anonim fonksiyon | f := func() { ... } |
| Closure | func counter() func() int { ... } |
| Defer (geri dönüşte çalışır) | defer file.Close() |
Slice'lar ve diziler
Dizilerin sabit boyutu vardır; slice'lar diziler üzerinde dinamik görünümlerdir.
| İşlem | Söz dizimi |
|---|---|
| Sabit boyutlu dizi | var a [3]int |
| Slice değişmezi | nums := []int{1, 2, 3} |
| Bir slice oluştur (make) | s := make([]int, 0, 10) |
| Ekle (append) | s = append(s, 4) |
| Uzunluk / kapasite | len(s), cap(s) |
| Bir slice'ı dilimle | s[1:3] |
| Kopyala | copy(dst, src) |
| Dolaş | for i, v := range s { ... } |
Map'ler
Map'ler Go'nun yerleşik hash tablolarıdır.
| İşlem | Söz dizimi |
|---|---|
| Bir map oluştur (make) | m := make(map[string]int) |
| Map değişmezi | m := map[string]int{"a": 1, "b": 2} |
| Bir değer ayarla | m["c"] = 3 |
| Bir değer al | v := m["a"] |
| Varlığı kontrol et | v, ok := m["x"] |
| Bir anahtarı sil | delete(m, "a") |
| Uzunluk | len(m) |
| Dolaş | for k, v := range m { ... } |
Struct'lar ve metotlar
Struct'lar alanları gruplar; metotlar bir alıcı (receiver) aracılığıyla davranış ekler.
| İşlem | Söz dizimi |
|---|---|
| Bir struct tanımla | type Point struct { X, Y int } |
| Bir örnek oluştur | p := Point{X: 1, Y: 2} |
| Bir alana eriş | p.X |
| Bir struct'a işaretçi | p := &Point{1, 2} |
| Değer alıcılı metot | func (p Point) Dist() float64 { ... } |
| İşaretçi alıcılı metot | func (p *Point) Move(dx int) { p.X += dx } |
| Gömülü struct | type Circle struct { Point; R int } |
| Struct etiketleri | Name string, ters tırnaklı bir json:"name" etiketiyle |
Arayüzler
Arayüzler örtük olarak karşılanır - doğru metotlara sahip her tip uygundur.
| İşlem | Söz dizimi |
|---|---|
| Bir arayüz tanımla | type Shape interface { Area() float64 } |
| Uygula (örtük) | func (c Circle) Area() float64 { ... } |
| Boş arayüz (any) | var x interface{} veya var x any |
| Tip iddiası (assertion) | s, ok := x.(string) |
| Tip switch'i | switch v := x.(type) { case int: ... } |
| Stringer arayüzü | func (p Point) String() string { ... } |
Goroutine'ler ve channel'lar
Goroutine'ler hafif iş parçacıklarıdır; channel'lar aralarında değer aktarır.
| İşlem | Söz dizimi |
|---|---|
| Bir goroutine başlat | go doWork() |
| Bir channel oluştur (make) | ch := make(chan int) |
| Tamponlu channel | ch := make(chan int, 5) |
| Bir channel'a gönder | ch <- 42 |
| Bir channel'dan al | v := <-ch |
| Bir channel'ı kapat | close(ch) |
| Bir channel üzerinde range | for v := range ch { ... } |
| Channel'lar üzerinde select | select { case v := <-ch: ...; default: ... } |
| Wait group | var wg sync.WaitGroup; wg.Add(1); wg.Wait() |
| Mutex | var mu sync.Mutex; mu.Lock(); mu.Unlock() |
Hata yönetimi
Go hataları değer olarak döndürür - istisna (exception) yoktur.
| İşlem | Söz dizimi |
|---|---|
| Bir hata döndür | func read() (string, error) { return "", err } |
| Bir hatayı kontrol et | if err != nil { return err } |
| Bir hata oluştur | errors.New("not found") |
| Biçimlendirilmiş hata | fmt.Errorf("bad id %d", id) |
| Bir hatayı sar | fmt.Errorf("load: %w", err) |
| Çöz / eşleştir | errors.Is(err, os.ErrNotExist) |
| Tipe göre eşleştir | errors.As(err, &target) |
| Panic / recover | defer func() { recover() }() |
En çok başvurduğunuz Go söz dizimi tek sayfada. Bu Go hile sayfası, temel dil için hızlı bir başvurudur - değişkenler ve tipler, slice'lar ve map'ler, struct'lar ve arayüzler, ayrıca Golang'ı eşzamanlılıkta parlatan goroutine'ler ve channel'lar.
Buradaki her şey standart Go'dur ve resmi araç zinciriyle derlenir. İhtiyacınız olanı kopyalayın ya da her kod parçasını Go playground'da canlı deneyin - kurulum gerekmez.
Go hile sayfası SSS
Bu Go hile sayfası ücretsiz mi?
Go'da := ile var arasındaki fark nedir?
var x = 0, bir değişken tanımlar ve paket düzeyi dahil her yerde çalışır. x := 0 kısa değişken tanımlamasıdır: hem tanımlar hem atar, tipi çıkarır ve yalnızca bir fonksiyon içinde kullanılabilir. Açık bir tipe veya paket düzeyinde bir değişkene ihtiyacınız olduğunda var, özlü yerel tanımlamalar için := kullanın.Goroutine'ler ve channel'lar nedir?
go someFunc() yazarak bir tane başlatırsınız. Channel'lar, goroutine'lerin güvenli şekilde iletişim kurmasını sağlayan tipli borulardır: bir goroutine ch <- v ile gönderir, diğeri <-ch ile alır. Birlikte Go'nun temel eşzamanlılık modelini oluştururlar; bu da "belleği iletişim kurarak paylaş" sözüyle özetlenir.