İÇİNDEKİLER
İçindekiler
Önsöz 5
1. GİRİS
1.1. Go Dokümantasyonu 18
1.2. Statik Kod Analizi 18
1.3. Yerleşik Test ve Profil Çerçevesi 18
1.4. Eşzamanlılık 18
1.5. Nesne Tabanlı Programlama 19
1.6. Garbage Collector 19
2. GELİŞTİRME ORTAMININ KURULMASI
2.1. Go Programlama Dilinin Kurulumu 23
2.1.1. Linux İşletim Sistemi Üzerine Kurulum 23
2.1.2. Windows İşletim Sistemi Üzerine Kurulum 26
2.1.3. macOS İşletim Sistemi Üzerine Kurulum 28
2.2. Visual Studio Code IDE’nin Kurulumu 31
2.3. Windows İşletim Sistemi Üzerinde Bash Kullanımı 33
2.4. Web Üzerinde Go Kullanma 36
2.5. Go Komutları 37
2.6. İlk Go Programı 39
2.7. Yazılan Programın GitHub’a Yüklenmesi 41
2.8. SHA256 Checksum 44
3. DEĞİŞKENLER VE OPERATÖRLER
3.1. Değişken Tanımlama Şekilleri 49
3.1.1. Veri Tipini Belirterek Değişken Tanımlama 49
3.1.2. İlk Değer Atayarak Değişken Tanımlama 50
3.1.3. Veri Tipi Belirtmeden Değişken Tanımlama 50
3.1.4. Sadece Değişken Adı ile Tanımlama 51
3.1.5. Blok Halinde Değişken Tanımlama 51
3.2. Boş Değişken (Blank Identifier) 51
3.3. Sayısal Veri Tipleri 53
3.3.1. Tamsayılar (Integers) 53
3.3.1.1. İşaretli Tamsayılar 53
3.3.1.2. İşaretsiz Tamsayılar 53
3.3.2. Kayan Noktalı Sayılar ( Floating Point Numbers ) 54
3.3.3. Complex Veri Tipi 55
3.4. Boolean Veri Tipi 55
3.5. String Veri Tipi 55
3.6. Custom Tip Tanımlama 56
3.7. Default Değerler 57
3.8. Sabitler 58
3.8.1. Veri Tipini Belirterek Sabit Tanımlama 58
3.8.2. Veri Tipini Belirtmeden Sabit Tanımlama 59
3.8.3. Blok Halinde Sabit Tanımlama 59
3.8.4. iota 59
3.9. Tür Dönüşümleri 61
3.10. Operatörler 62
3.10.1. Aritmetik Operatörler 62
3.10.2. Atama Operatörleri 63
3.10.3. Karşılaştırma Operatörleri 63
3.10.4. Mantıksal Operatörler 63
3.10.5. Bit Düzeyinde (Bitwise) Operatörler 64
3.10.6. Operatör Önceliği 64
4. KONTROL YAPILARI VE DÖNGÜLER
4.1. if Kontrol Yapısı 67
4.1.1. Tek Başına if Kullanımı 67
4.1.2. if–else Kullanımı 68
4.1.3. Zincir Halinde if–else Kullanımı 69
4.1.4. Özel if Koşul İfadesi Tanımlamaları 69
4.2. switch Kontrol Yapısı 71
4.2.1. İfadenin Değerine Göre Switch–Case 71
4.2.2. İfade Kontrolü Yapmadan Switch–Case Kullanımı 72
4.2.3. İfadeye İlk Değer Atayarak Switch–Case Kullanımı 73
4.2.4. fallthrough 73
4.3. for Döngü Yapısı 75
4.3.1. Sayaç Kontrollü for Yapısı 75
4.3.2. Şart Kontrollü for Yapısı 76
4.3.3. Sonsuz Döngü 77
4.3.4. range for Yapısı 78
4.4. break Komutu 78
4.5. continue Komutu 79
4.6. Etiket (label) Kullanımı ve goto Komutu 80
5. COMPOSİTE TİPLER
5.1. Diziler 85
5.1.1. Genel dizi tanımlaması 85
5.1.2. İlk Değer Atama ile Tanımlama 86
5.1.3. len() Fonksiyonu 87
5.1.4. Dizi elemanlarına iteratif erişim 87
5.1.4. Çok Boyutlu Diziler 90
5.1.5. Fonksiyon Parametresi Olarak Diziler 92
5.2. Slice (Kesit) 94
5.2.1. Diziden Slice Tanımlama 95
5.2.2. Bir Slice’tan Başka Bir Slice Tanımlama 96
5.2.3. make() Fonksiyonu ile Slice Oluşturma 97
5.2.4. copy() Fonksiyonu 98
5.2.5. append() 99
5.2.6. Slice Üzerinde İteratif İşlemler 100
5.2.7. Çok Boyutlu Slice 101
5.2.8. Fonksiyona Parametre Olarak Slice Gönderme 102
5.3. Map 102
5.3.1. make() Fonksiyonu ile map Tanımlama 104
5.3.2.map İçerisinden Eleman Silme 105
5.3.3. Fonksiyonlara parametre olarak map gönderme 106
6. STRİNGLER
6.1. String İçerisine Erişim 109
6.2. rune – string 110
6.3. string – byte–rune dönüşümü 111
6.4. String fonksiyonları 112
6.4.1. Önekler ve Sonekler ( Prefixes ve suffixes) 112
6.4.2. Contains() 113
6.4.3. Index() 113
6.4.4. () 114
6.4.5. Count() 115
6.4.6. Repeat() 115
6.4.7. ToUpper() , ToLower() 116
6.4.8. Trim() 116
6.4.6. Split() 117
6.4.7.Join() 117
6.5. strconv paketi 118
6.5.1. Atoi() 118
6.5.2. Itoa() 118
6.5.3. Parse() 119
6.5.3. Format() 120
7. KONSOL İŞLEMLERİ
7.1. Print Fonksiyonu 125
7.2. Printf Fonksiyonu 127
7.3. Println Fonksiyonu 130
7.4. Scan fonksiyonu 130
7.5. Scanf fonksiyonu 133
7.6. Scanln fonksiyonu 135
8. FONKSİYONLAR
8.1. Variadic Parametreler 142
8.2. Anonymous (Anonim) Fonksiyonlar 143
8.3. Closures 144
8.4. Yüksek Mertebeden (Higher–Order) Fonksiyonlar 145
8.5. Recursive (Özyinelemeli) Fonksiyonlar 147
8.6. Defer 148
8.7. İsimlendirilmiş Sonuç Parametreleri 149
8.8. Değer ile Çağırma (Call By Value) 150
8.9. Referans ile Çağırma (Call By Reference) 150
9. POİNTER (İŞARETÇİLER)
9.1. İşaretçilerin Default (varsayılan) değerleri 155
9.2. Pointer işaret eden Pointer 158
9.3. new() ile Pointer Oluşturma 159
9.4. Pointerların fonksiyonlar ile kullanımı 159
10. STRUCT
10.1. Anonymous (Anonim) Struct 165
10.2. Anonymous (Anonim) Alanlar 165
10.3. Struct’ların Default (Varsayılan) Değerleri 166
10.4. İç İçe Struct Kullanımı 166
10.5. Promoted alanlar 167
10.5. Struct’ların karşılaştırılması 169
10.6. Structlarda Dışa Aktarım (Exported Struct) 170
10.7. Pointer ile Struct’lar 170
10.8. new() 172
10.9. Structlarda reflection 172
11. METOTLAR VE NESNEYE YÖNELİK PROGRAMLAMA
11.1. Metotlar 177
11.2. Pointer Alıcılar 179
11.3. Metotların Struct Olmayan Veri Tipleri ile Kullanılması 180
11.4. Class (Sınıf) Yerine Struct (Yapı) 181
11.5. Kurucu Fonksiyon (Constructor) 182
11.6. Kalıtım (Inheritance) Yerine Birleştirme (Composition) 185
11.7. Arayüz (Interface) 188
11.7.1. Boş Arayüz (Empty Interface) 190
11.7.2. Type Assertion 191
11.7.3. Tip Anahtarı (Type Switch) 192
11.7.4. Çoklu Arayüz İmplementasyonu 193
11.7.5. Arayüz Gömme (Interface Embedding) 194
11.8. Reflection (Yansıma) 196
12. PAKETLER
12.1. Kendi Paketini Geliştirme 201
12.2. Paket Bazında Değişken ve Fonksiyonların Görünürlüğü 204
12.3. Paket Tanımlayıcılarına İsim Verme 206
12.4. Nokta Tanımlayıcısı 207
12.5. Paketlerde init Fonksiyonu 207
12.6. Default Olmayan Go Kütüphanelerinin Kullanılması 208
12.7. flag Paketi 209
12.8. math Paketi 211
12.8.1. Sabitler 211
12.8.2. Fonksiyonlar 211
12.8.3 math/rand Kütüphanesi 215
12.8.3.1 rand.Float64() Fonksiyonu 215
12.8.3.2 rand.Intn() Fonksiyonu 216
12.8.3.3 Perm() Fonksiyonu 217
13. EŞZAMANLILIK (CONCURRENCY)
13.1. Go Rutinleri (Go Routines) 223
13.2. Kanallar (Channels) 226
13.3. Deadlock 229
13.4. Kanalların Kapatılması 229
13.5. Tek Yönlü Kanallar (Unidirectiona Channels) 231
13.6. Buffered Kanallar 233
13.7. WaitGroup 235
13.8. Worker Pool 236
13.9. Select 238
13.10. Mutex 241
14. DOSYA İŞLEMLERİ
14.1. Dosyadan Veri Okuma 245
14.1.1. io/ioutil paketi ile dosya okuma 245
14.1.2. bufio paketi ile dosya okuma 247
14.1.4. Dosyayı küçük parçalar halinde okuma 247
14.1.6. flag() ile Komut Satırından dosya okuma 249
14.2. Dosya Yazma İşlemleri 249
14.2.1. String olarak yazdırma 250
14.2.2. byte Olarak Yazdırma 251
14.2.3. Stringleri satır satır dosyaya yazdırma 252
14.2.4. Var Olan Bir Dosyaya Ekleme Yapmak 253
14.3. Dosya Bilgilerini Alma 254
14.4. Dosya Kontrolü 255
14.5. Dosya Taşıma/ İsim Değiştirme 256
15. HATA İŞLEME (ERROR HANDLİNG)
15.1. error Veri Tipi 260
15.2. Özel (Custom) Hata Oluşturulması 264
15.3. panic 268
15.4. recover 271
16. TEST
16.1. Table Tests 277
16.2. Test ve Dokümantasyon Oluşturma 278
16.3. Golint 282
16.4. Benchmark 282
16.5. Coverage Analizi 284
17. JSON
17.1. Valid Fonksiyonu 290
17.2. Marshal 290
17.3. MarshalIndent 292
17.4. Unmarshal 293
17.5. Bir JSON Dosyası Oluşturulması 296
17.6. Bir JSON Dosyasından Okuma Yapılması 296
18. MODÜLLER 299 |