README ¶ Mustafa Akgül Özgür Yazılım Yaz Kampı 2023 Golang 101 Kursu Uğur Özyılmazel ve Erhan Akpınar tarafından Ağustos 2023 tarihinde verilen Golang programlama dili kursu. Bölüm 01: Golang Hakkında Genel Bilgiler Tanıtım, Öne Çıkan Kısımları Go Proverbs Kurulum VSCode Kurulumu Bölüm 02: Golang Uygulamasına Genel Bakış Paket Kavramı ve main Paketi Executable, Library ve Golang Uygulamasını Çalıştırmak Bölüm 03: Dil Kuralları Encoding Nedir? Unicode Desteği Anahtar Kelimeler Operatörler ve İşaretçiler Built-in (gömülü gelen) Veri Tipleri Kod Stili Sabitler Değişkenler Bölüm 04: Veri Tipleri Strings (metinseller) Booleans (mantıksallar) Numerics (sayısallar) Arrays (diziler) Slices (dizi kesitleri) Structs (yapılar) Struct Annotations Pointer (işaretçi) Kavramı Struct Methods ve Receivers Maps Tip Dönüştürmek Bölüm 05: Fonksiyonlar Function Signature (fonksiyon imzası) Argüman / Parametre Return Values (fonksiyodan geriye dönen değerler) Recursivity (özyineleme) Closure / Anonim Fonksiyonlar ve Function Scope (kapsama alanı) Deferring (erteleme) Bölüm 06: Durum Kontrolleri if, else, else if Short if declaration (kısa if tanımı) switch ve case İfadeleri Label, break ve goto İşlemleri Bölüm 07: Döngüler C stili döngü range break ve continue for ve Koşul Kullanımı Label Kullanımı Bölüm 08: Interface Tanımı Tip Olarak empty interface ya da any Tip Kontrol Meknizması Davranış Olarak interface Bölüm 09: Error error Nedir? Custom Error Types (özelleştirilmiş error tipi oluşturmak) Wrapping (sarmalama) Unwrapping (sarmalı açma) error Tip Kontrolleri: errors.Is ve errors.As panic ve recover Yaygın Pratikler Bölüm 10: nil nil Nedir? Nerelerde ve Ne İçin Kullanınır? Bölüm 11: Generics Nedir? Ne Amaçla Kullanılır Fonksiyonlarda Genericler Custom Tiplerde Generic Generic Fonksiyon Çağrıları Generic Tipi struct’da Kullanmak Generic Tipi map’lerde Kullanmak Generic Gerçek Hayat Örneği Bölüm 12: Reflection Ne İşe Yarar? Faydaları ve Zararları Bölüm 13: JSON İle Çalışmak Genel Bilgi Encoding (Marshal) Decoding (Unmarshal) json:"TAG" Custom Decoding Custom Encoding Generic Interface Streaming Encoders ve Decoders Bölüm 14: Test Test Nedir? Neden Yazılır? Test Nasıl Çalıştırılır Examples ve godoc Nedir? Race Detection Nedir? Table Driven Test Nedir? Sub Tests SetUp ve TearDown Nedir? Testlerin Paralel Çalıştırılması? Code Coverage Nedir? Benchmarking Nedir? Escape Analysis Memory ve CPU Profiling Temelleri Bölüm 15: Concurrency Nedir? Golang’in Concurrency Stratejisi Nedir? Goroutine Nedir? go Kelimesiyle Başlayan Anonim Fonksiyonlar WaitGroup Nedir? Channels done Pattern Deadlock Range Over Channels Buffered Channels Semaphore Pattern Fan Out Pattern select Ticker Worker Pattern Mutex Nedir? Context Bölüm 16: İsimlendirme Kuralları Naming Conventions Değişken İsimlendirmesi Fonksiyon İsimlendirmesi Method’ların İsimlendirmesi Interface’lerin İsimlendirmesi Paketlerin İsimlendirmesi Bölüm 17: Golang Paketi Geliştirmek golangci-linter Kurulumu ve Konfigürasyonu Go Modülü Anatomisi stringutils Paketi Paketi Dağıtmak / Paylaşmak Bölüm 18: In-Memory Key-Value Store http Paketini Kullanarak Rest-API Tasarlamak Domain Driven Design prensibini Kullanmak Geliştirme http server’ın Unit Testleri Uygulamanın Docker Container’ından Çalıştırılması GitHub Actions ile Linter/Checker Kullanımı Açık Kaynak Haline Getirmek Bonus Faydalı Linkler kvstore Quiz Quiz 1 mkdocs Otomatik doküman oluşturmak için; pip install -r requirements.txt rake -T rake mkdocs:build # build docs rake mkdocs:deploy # deploy to GitHub rake mkdocs:serve # run docs server rake release[revision] # release new version major,minor,patch, default: patch Katkı Hata raporları ve katkı istekleri, https://github.com/vbyazilim/maoyyk2023-golang-101-kursu adresindeki GitHub ortamında herkese açıktır. Bu projenin, işbirliği için güvenli ve davetkar bir alan olması amaçlanmıştır ve katkıda bulunanların Katkıcı Ahdi Topluluk Sözleşmesi davranış kurallarına uyması beklenir. Lisans Bu projede MIT lisansı kullanılmıştır. Katkıcı Ahdi Topluluk Sözleşmesi Bu projenin kaynak kodunda, sorun izleyicilerinde, sohbet odalarında ve posta listelerinde etkileşimde bulunan herkesin davranış kurallarına uyması beklenir. Expand ▾ Collapse ▴ Directories ¶ Show internal Expand all Path Synopsis src 02/01-init command 04/05-struct-custom-tag command 04/05-struct-field-access command 04/05-struct-field-access-getter command 04/05-struct-field-access-getter/person 04/05-struct-field-access/person 04/05-struct-field-alignment command 04/05-struct-validate command 11/generics-constraints command 11/generics-custom-types command 11/generics-function-calls command 11/generics-function-calls-and-types command 11/generics-function-calls-and-types2 command 11/generics-functions command 11/generics-functions-interface command 11/generics-in-maps command 11/generics-in-structs command 12/reflect-clearvalue command 12/reflect-typecheck command 13/json-custom-decode command 13/json-generic-interface command 13/json-marshal-custom-time command 13/json-streaming command 14/test-benchmarking/stringutils 14/test-code-coverage command 14/test-code-coverage/greet 14/test-datarace/kvstore 14/test-greet command 14/test-greet/greet 14/test-parallel/greet 14/test-setup-teardown/greet 14/test-table-driven-sub-tests/greet 14/test-table-driven/greet 15/channels/basic-goroutine-with-channel command 15/channels/buffered-channels command nolint:dupword nolint:dupword 15/channels/buffered-fan-out-pattern command 15/channels/buffered-semaphore-pattern command 15/channels/buffered-worker-pattern command 15/channels/deadlock command 15/channels/done-pattern command 15/channels/drop-pattern command 15/channels/open-close-check command 15/channels/range-over-channels command 15/channels/select command 15/channels/send-nil command 15/channels/send-only command 15/channels/ticker command 15/channels/unblock-send command 15/channels/unblock-send-with-buffered-ch command 15/context/waitgroup-channel-deadline command 15/context/with-cancel command 15/context/with-dead-line command 15/context/with-timeout command 15/context/with-value command 15/mutex/atomic-done-channel command 15/mutex/atomic-waitgroup command 15/mutex/in-channel command 15/mutex/kvstore 15/mutex/sync-map command 15/waitgroup command 18/basic-http-server command 18/basic-mux command bonus/unexportablechanger command Click to show internal directories. Click to hide internal directories.