Menu
Coddy logo textTech

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.

İşlemSöz dizimi
Paket bildirimipackage main
Bir paketi içe aktarimport "fmt"
Birden fazla paketi içe aktarimport (\n "fmt"\n "os"\n)
Giriş noktasıfunc main() { ... }
Bir satır yazdırfmt.Println("Hello, World!")
Biçimlendirilmiş yazdırmafmt.Printf("%d items\n", n)
Bir dosyayı çalıştırgo run main.go
Bir ikili dosya derlego build

Değişkenler ve tipler

Go statik tiplidir ama := ile tipleri çıkarabilir.

İşlemSöz dizimi
Tiple tanımlavar age int = 30
Çıkarımla tanımlavar name = "Ada"
Kısa tanımlamacount := 0
Aynı anda birden fazlax, y := 1, 2
Sabitconst Pi = 3.14
Sıfır değerleri0, "", false, nil
Temel tiplerint, 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.

İşlemSöz dizimi
If / elseif x > 0 { ... } else { ... }
İlk değer ifadeli ifif 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 rangefor i, v := range items { ... }
Switchswitch day { case 1: ...; default: ... }
İfadesiz switchswitch { case x > 0: ... }
Break / continuebreak, continue

Fonksiyonlar

Fonksiyonlar birinci sınıf değerlerdir ve birden fazla sonuç döndürebilir.

İşlemSöz dizimi
Temel fonksiyonfunc add(a int, b int) int { return a + b }
Ortak parametre tipifunc add(a, b int) int { ... }
Birden fazla geri dönüş değerifunc divmod(a, b int) (int, int) { return a / b, a % b }
Adlandırılmış geri dönüş değerlerifunc split(sum int) (x, y int) { x = sum / 2; return }
Variadic fonksiyonfunc sum(nums ...int) int { ... }
Anonim fonksiyonf := func() { ... }
Closurefunc 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.

İşlemSöz dizimi
Sabit boyutlu dizivar a [3]int
Slice değişmezinums := []int{1, 2, 3}
Bir slice oluştur (make)s := make([]int, 0, 10)
Ekle (append)s = append(s, 4)
Uzunluk / kapasitelen(s), cap(s)
Bir slice'ı dilimles[1:3]
Kopyalacopy(dst, src)
Dolaşfor i, v := range s { ... }

Map'ler

Map'ler Go'nun yerleşik hash tablolarıdır.

İşlemSöz dizimi
Bir map oluştur (make)m := make(map[string]int)
Map değişmezim := map[string]int{"a": 1, "b": 2}
Bir değer ayarlam["c"] = 3
Bir değer alv := m["a"]
Varlığı kontrol etv, ok := m["x"]
Bir anahtarı sildelete(m, "a")
Uzunluklen(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.

İşlemSöz dizimi
Bir struct tanımlatype Point struct { X, Y int }
Bir örnek oluşturp := Point{X: 1, Y: 2}
Bir alana erişp.X
Bir struct'a işaretçip := &Point{1, 2}
Değer alıcılı metotfunc (p Point) Dist() float64 { ... }
İşaretçi alıcılı metotfunc (p *Point) Move(dx int) { p.X += dx }
Gömülü structtype Circle struct { Point; R int }
Struct etiketleriName 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.

İşlemSöz dizimi
Bir arayüz tanımlatype 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'iswitch 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.

İşlemSöz dizimi
Bir goroutine başlatgo doWork()
Bir channel oluştur (make)ch := make(chan int)
Tamponlu channelch := make(chan int, 5)
Bir channel'a gönderch <- 42
Bir channel'dan alv := <-ch
Bir channel'ı kapatclose(ch)
Bir channel üzerinde rangefor v := range ch { ... }
Channel'lar üzerinde selectselect { case v := <-ch: ...; default: ... }
Wait groupvar wg sync.WaitGroup; wg.Add(1); wg.Wait()
Mutexvar mu sync.Mutex; mu.Lock(); mu.Unlock()

Hata yönetimi

Go hataları değer olarak döndürür - istisna (exception) yoktur.

İşlemSöz dizimi
Bir hata döndürfunc read() (string, error) { return "", err }
Bir hatayı kontrol etif err != nil { return err }
Bir hata oluşturerrors.New("not found")
Biçimlendirilmiş hatafmt.Errorf("bad id %d", id)
Bir hatayı sarfmt.Errorf("load: %w", err)
Çöz / eşleştirerrors.Is(err, os.ErrNotExist)
Tipe göre eşleştirerrors.As(err, &target)
Panic / recoverdefer 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?
Evet. Bu Go hile sayfası tamamen ücretsizdir ve kayıt gerektirmez. Yer imlerinize ekleyin ve bir slice işlemine, channel desenine ya da struct metoduna bakmanız gerektiğinde geri dönün.
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?
Bir goroutine, Go çalışma zamanı tarafından yönetilen hafif bir iş parçacığıdır - 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.
Go'yu çevrimiçi olarak deneyebilir miyim?
Evet. Go playground'u açarak bu hile sayfasındaki herhangi bir kod parçasını tarayıcınızda çalıştırabilirsiniz - kurmanız gereken bir Go araç zinciri yok. Yapı istediğinizde, Coddy'nin ücretsiz etkileşimli Go kursu sizi değişkenler ve slice'lardan goroutine'lere ve channel'lara adım adım götürür.
Bu hile sayfası yeni başlayanlar için uygun mu?
Evet. En yaygın konulardan (değişkenler, kontrol akışı, fonksiyonlar) gelişmiş olanlara (goroutine'ler, channel'lar, hata yönetimi) doğru düzenlenmiştir, böylece üstteki bölümleri ilk günden kullanabilir ve zamanla geri kalanına geçebilirsiniz.
Coddy programming languages illustration

Coddy ile Go öğren

BAŞLA