Bu yazıda, Golang (Go) diline başlangıç seviyesinde hakim olan geliştiricilerin, veri tipleri, struct gibi özel yapılar, pointer kullanımı, diziler, slice'lar ve map'ler ile fonksiyon ve interface tanımlarını öğrenmesi hedeflenmiştir.
Bu yazıda, Golang (Go) diline başlangıç seviyesinde hakim olan geliştiricilerin, veri tipleri, struct gibi özel yapılar, pointer kullanımı, diziler, slice'lar ve map'ler ile fonksiyon ve interface tanımlarını öğrenmesi hedeflenmiştir. Ayrıca eşzamanlı programlama için önemli olan goroutine ve worker havuzu yapıları anlatılarak, Go diline özgü pratik kullanımlar ve temel kütüphaneler hakkında detaylı bilgiler sunulmuştur.
Bu yazıda Go dilindeki temel veri tipleri, özel yapılar (struct
), eşzamanlı programlama için goroutine ve worker kavramlarını detaylıca inceleyeceğiz.
Go dilinde kullanılan temel veri tipleri aşağıdaki gibidir:
Integer: int
, int8
, int16
, int32
, int64
Unsigned Integer: uint
, uint8
, uint64
gibi
Float: float32
, float64
String: string
Boolean: bool
Diğer: byte
, rune
Örnek kullanım:
GOvar yas int = 30 var isim string = "Deniz" var fiyat float64 = 99.99 var aktifMi bool = true
Go dilinde struct, farklı veri tiplerini bir arada tutan özel veri yapılarıdır. Nesne yönelimli programlamadaki class mantığına benzer.
Örnek:
GOtype Kullanici struct { Ad string Yas int Email string } kullanici := Kullanici{"Deniz", 30, "deniz@example.com"} fmt.Println(kullanici.Isim)
Go’da iç içe yapılar oluşturabilirsiniz:
GOtype Adres struct { Sehir string Ulke string } type Kullanici struct { Isim string Yas int Adres Adres } kullanici := Kullanici{"Deniz", 30, Adres{"İstanbul", "Türkiye"}} fmt.Println(kullanici.Adres)
Go’da pointer kullanımı, bellekteki bir veriye doğrudan erişim sağlar.
Örnek:
GOsayi := 42 ptr := &sayi fmt.Println(*ptr) // Değere erişir fmt.Println(ptr) // adresi yazdırır
Dizi boyutu sabittir:
GOvar rakamlar [3]int = [3]int{1, 2, 3}
Slice, dinamik boyutludur:
GOvar rakamlar []int rakamlar = append(rakamlar, 4, 5)
Anahtar-değer eşleşmeleri oluşturur:
GOkullanicilar := map[string]int{"Deniz": 30, "Ali": 25}
Go’da fonksiyonlar temel yapı taşlarıdır:
GOfunc Topla(a int, b int) int { return a + b } sonuc := Topla(3, 4) fmt.Println(sonuc) // 7
Interface'ler, farklı struct'ların ortak yöntemlerini tanımlar:
GOtype Hayvan interface { SesCikar() string } type Kopek struct{} func (k Kopek) SesCikar() string { return "Hav!" }
Go’nun en güçlü yönlerinden biri eşzamanlı programlama yapabilmesidir. Bu işlemleri Goroutine ve Channel yapıları ile yönetir.
Goroutine'ler hafif thread’ler olarak düşünebiliriz. Kullanımı oldukça kolaydır:
GOfunc mesajYaz(mesaj string) { for i := 0; i < 5; i++ { fmt.Println(mesaj, i) } } func main() { go mesajYaz("Merhaba") fmt.Scanln() }
Channel, goroutine’ler arasında güvenli veri alışverişi sağlar:
GOfunc sayilar(c chan int) { for i := 1; i <= 5; i++ { c <- i } close(c) } func main() { kanal := make(chan int) go func() { kanal <- 10 }() sonuc := <-kanal fmt.Println(sonuc) }
Goroutine’leri işçi havuzu gibi kullanarak işleri eşzamanlı yapabiliriz:
GOfunc worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Println("İşlem başladı:", j) sonuc := j * 2 results <- sonuc } } func main() { jobs := make(chan int, 100) results := make(chan int, 100) for w := 1; w <= 5; w++ { go worker(jobs, results) } for j := 1; j <= 10; j++ { jobs <- j } close(jobs) for a := 1; a <= 10; a++ { fmt.Println(<-results) } } func worker(jobs <-chan int, results chan<- int) { for n := range jobs { results <- n * n } }
go fmt
: Kod formatlamago mod
: Bağımlılık yönetimidefer
: Fonksiyon çıkışında çalıştırılacak işlemlerGOfunc dosyaOku() { dosya, err := os.Open("deneme.txt") if err != nil { panic(err) } defer dosya.Close() // Dosya okuma işlemleri... }
Örneğin, strings kütüphanesi kullanımı:
GOimport "strings" fmt.Println(strings.ToUpper("golang")) // GOLANG
Go dili, güçlü eşzamanlı işlem özellikleri, temiz söz dizimi ve geniş standart kütüphanesi ile modern programlamanın ihtiyaçlarını karşılayan popüler bir dildir. Bu temel kavramlar ve özel yapılar ile hızlıca Go dilinde projeler geliştirmeye başlayabilirsiniz.
Kolay gelsin!