Go Diline Giriş
Golang olarak da bilinen Go , Google mühendisleri Robert Griesemer, Rob Pike ve Ken Thompson tarafından geliştirilen açık kaynaklı bir programlama dilidir. Basit, verimli ve güvenilir olacak şekilde tasarlanmıştır. Go, özellikle sunucu tarafı ve arka uç altyapı sistemleri alanlarında modern uygulama geliştirme için idealdir. Basit sözdizimi, yerleşik eşzamanlılık desteği ve mükemmel performansı ile Go, web uygulamaları, mikro hizmetler ve dağıtılmış sistemler oluşturmak için geliştiriciler arasında popüler bir seçim haline geldi.
Go'nun ekosistemi, piyasaya sürüldüğü 2009'dan bu yana hızla büyüyerek geliştiricilerin yararlanabileceği çok çeşitli kitaplıklar ve araçlar sunuyor. Dropbox, Uber ve Docker gibi şirketler, temel arka uç sistemleri için Go'yu seçerek günümüzün teknoloji ortamındaki önemini ve alaka düzeyini daha da vurguladılar.
Bu makale, Go programlama yolculuğunuza başlamanızı sağlayacak temel dil özelliklerine odaklanarak size Go ve sözdiziminde sağlam bir temel sağlamayı amaçlamaktadır.
Go'yu Yükleme ve Ayarlama
Go ile çalışmaya başlamadan önce dili bilgisayarınıza yüklemeniz gerekir. Başlamak için şu adımları izleyin:
- Resmi Go web sitesini ziyaret edin ve işletim sisteminiz için uygun kurulum dosyasını indirin.
- İndirilen dosyayı açın ve yükleyici tarafından sağlanan kurulum talimatlarını izleyin.
-
PATH
ortam değişkenini Go'nun kurulum dizinini içerecek şekilde ayarlayın. Bu, Go komutlarının komut satırından kullanılabilir olmasını sağlayacaktır. Unix sistemlerinde,.bashrc
veya.profile
dosyanıza genellikle aşağıdaki satırı ekleyebilirsiniz:
export PATH=$PATH:/usr/local/go/bin
- Değişiklikleri uygulamak için terminalinizi veya komut isteminizi yeniden başlatın.
- Terminalinizde aşağıdaki komutu çalıştırarak Go'nun doğru şekilde kurulduğunu onaylayın:
go version
Yükleme başarılı olursa, çıktıda bilgisayarınızda yüklü olan Go sürümü görüntülenecektir.
Artık Go bilgisayarınızda kurulu olduğuna göre, dilin temellerine dalmanın zamanı geldi.
Go Söz Dizimini ve Veri Türlerini Anlamak
Go'nun sözdizimi basit ve okunması kolay olacak şekilde tasarlanmıştır. Burada paketler, içe aktarmalar, değişkenler ve temel veri türleri dahil olmak üzere bazı temel dil öğelerini ele alacağız.
Paketler ve İthalatlar
Go programları, kodu modülerleştirmeye ve yönetmeye yardımcı olan packages
halinde düzenlenmiştir. Paket, temelde bir veya daha fazla Go kaynak dosyası içeren bir dizindir. Her Go dosyasının ilk satırı, ait olduğu paketi bildirmelidir:
package main
Yukarıdaki örnekte kaynak dosya "ana" pakete aittir. Paket bildirimini izleyen kod bloğu, genellikle programınız için gereken diğer paketleri içeren import
ifadelerinden oluşur:
import ( "fmt" "math" )
import
deyimi, geçerli dosyaya içe aktarılacak paketleri belirtir ve bu paketlerin işlevler ve değişkenler gibi dışa aktarılan özelliklerine erişmenize olanak tanır.
Değişkenler ve Sabitler
Go'daki değişkenler, var
anahtar sözcüğü ve ardından değişken adı, türü ve isteğe bağlı başlangıç değeri kullanılarak bildirilebilir:
var x int = 10
İlk değer sağlanırsa Go, türü anlayabilir ve tür bildirimini atlamanıza olanak tanır:
var x = 10 // x is an int
Ayrıca, Go'nun türü otomatik olarak anlayan ve bir başlangıç değeri atayan kısa değişken bildirimi sözdizimini de kullanabilirsiniz:
x := 10 // x is an int
Sabitler const
anahtar sözcüğü kullanılarak bildirilebilir. Değerleri derleme zamanında bilinmelidir ve program yürütülürken değiştirilemez:
const PI = 3.14159
Temel Veri Türleri
Go, aşağıdakiler de dahil olmak üzere birkaç temel veri türüne sahiptir:
- Tamsayılar: İşaretli tamsayılar
int
,int8
,int16
,int32
veyaint64
kullanılarak bildirilebilir. İşaretsiz tamsayılaruint
,uint8
,uint16
,uint32
veyauint64
ile tanımlanabilir. - Kayan Noktalı Sayılar: Bunlar,
float32
veyafloat64
kullanılarak tanımlanabilir. - Karmaşık Sayılar: Karmaşık sayılar
complex64
veyacomplex128
kullanılarak bildirilir. - Boolean: Boolean,
bool
veri türüyle temsil edilir vetrue
veyafalse
değerine sahip olabilir. - Dizeler: Go dizeleri, UTF-8 kodlu karakter dizileridir. Değişmezler ve uzunlukları çalışma zamanında belirlenir.
Ek olarak Go, aşağıdakiler gibi bileşik veri türlerini destekler:
- Diziler: Aynı türdeki öğelerin sabit uzunluklu dizileri.
- Dilimler: Aynı türdeki elemanların dinamik uzunluktaki dizileri.
- Haritalar: Anahtarların ve değerlerin belirtilen herhangi bir türde olabildiği, sıralanmamış anahtar/değer çiftleri koleksiyonları.
Go'yu öğrenmeye devam ettikçe, daha karmaşık ve çok yönlü uygulamalar oluşturmak için bu temel veri türlerini ve yapılarını birleştirebileceksiniz.
Go'daki İşlevler ve Yöntemler
İşlevler, herhangi bir programlama dilinin temel yapı taşlarından biridir ve Go da bir istisna değildir. Go'daki işlevler, func
anahtar kelimesi ve ardından işlev adı, giriş parametreleri, dönüş türü ve işlev gövdesi kullanılarak tanımlanır. Go'daki işlevler birden çok değer döndürerek karmaşık işlemleri ve hata denetimini kolaylaştırabilir.
İşte basit bir Git işlevi örneği:
package main import ( "fmt" ) func add(a int, b int) int { return a + b } func main() { result1 := add(5, 7) fmt.Println("The sum is:", result1) }
Bu örnekte, iki tamsayı parametresi alan ve bunların toplamını döndüren basit bir add
işlevi tanımlıyoruz. Fonksiyon daha sonra main
fonksiyondan çağrılır ve sonuç yazdırılır.
Go'daki Yöntemler
Go'daki yöntemler, işlevlere benzer, ancak belirli bir alıcı türüyle ilişkilendirilirler ve alıcı türünün bir örneğinde çağrılırlar. Bu, nesne yönelimli programlama dillerinin sınıflardaki yöntemleri nasıl tanımladığına benzer şekilde, mevcut türlere davranış eklemeyi mümkün kılar. İşte bir örnek:
package main import ( "fmt" ) type Circle struct { radius float64 } func (c Circle) area() float64 { return 3.14159 * c.radius * c.radius } func main() { myCircle := Circle{radius: 5} circleArea := myCircle.area() fmt.Printf("The area of the circle is: %.2f\n", circleArea) }
Bu örnekte, radius
alanı olan bir Circle
yapısı tanımlıyoruz. Circle
tipi için area
adlı bir metot tanımlanır. Bu yöntem, yarıçapı kullanarak dairenin alanını hesaplar ve sonucu bir float64 değeri olarak döndürür.
Go'daki Kontrol Yapıları
Kontrol yapıları, programın akışını dikte ettikleri için herhangi bir programlama dilinin temelidir. Go, koşullu dallanma, döngü ve çoklu koşul kontrolleri veya iletişim işlemleri için çeşitli kontrol yapıları sunar.
If İfadeleri
Go'da, koşullu dallanma genellikle if
ifadeleri kullanılarak yapılır. Bu ifadeler, bir boole ifadesini değerlendirir ve doğruysa, ifadeyi izleyen kod bloğunu yürütür. İşte bir örnek:
package main import ( "fmt" ) func main() { number := 42 if number%2 == 0 { fmt.Println("The number is even.") } else { fmt.Println("The number is odd.") } }
Bu örnekte, modulo operatörünü ve bir if
ifadesini kullanarak bir sayının çift mi tek mi olduğunu kontrol ediyoruz.
Döngüler için
Go'nun yalnızca bir tür döngüsü vardır: for
döngüsü. Her türlü döngü senaryosu için kullanılabilir: sabit yinelemeler, sonsuz döngüler ve "while" döngüleri. İşte bir örnek:
package main import ( "fmt" ) func main() { for i := 1; i <= 5; i++ { fmt.Println("Iteration:", i) } }
Bu örnekte, beş kez yinelemek ve geçerli yineleme numarasını yazdırmak için sayaçlı bir for
döngüsü kullanıyoruz.
Deyimleri Değiştir ve Seç
Go, çoklu koşul denetimleri için switch
deyimini ve iletişim işlemleri için select
deyimini sağlar. İşte bir switch
ifadesi örneği:
package main import ( "fmt" ) func main() { grade := "B" switch grade { case "A": fmt.Println("Excellent!") case "B": fmt.Println("Good") case "C": fmt.Println("Fair") case "D": fmt.Println("Poor") default: fmt.Println("Invalid grade") } }
Bu örnekte, giriş notunu kontrol etmek ve ilgili performans açıklamasını yazdırmak için bir switch
deyimi kullanıyoruz. Diğer dillerden farklı olarak Go, eşleşen bir durumu yürüttükten sonra switch
ifadesinden çıktığı için her case bloğunun sonunda bir break
ifadesi gerektirmez.
Go'da eşzamanlılık
Go'nun en güçlü özelliklerinden biri, Goroutines ve Channels kullanarak eşzamanlılık için yerleşik desteğidir. Eşzamanlılık, birden çok yürütme iş parçacığının aynı anda çalışmasına izin vererek uygulamalarda daha yüksek performans ve yanıt verebilirlik sağlar.
gorutinler
Goroutinler, Go'da hafif, eşzamanlı işlev yürütmeleridir. Bir Goroutine oluşturmak için go
anahtar sözcüğünü bir işlev çağrısının başına eklemeniz yeterlidir. İşlev, aynı adres alanını paylaşan programın geri kalanıyla eşzamanlı olarak yürütülmeye başlar. İşte bir örnek:
package main import ( "fmt" "time" ) func display(message string) { for i := 0; i < 5; i++ { fmt.Println(message) time.Sleep(1 * time.Second) } } func main() { go display("Hello") go display("World") // Let Goroutines finish before exiting time.Sleep(5 * time.Second) }
Bu örnekte, mesajları görüntüleyen ve tekrarlamadan önce bir saniye duraklayan iki Goroutin oluşturuyoruz. Ana işlev, programdan çıkmadan önce Goroutinlerin bitmesini sağlamak için beş saniye bekler.
Kanallar
Kanallar, Goroutinler arasındaki iletişim araçlarıdır. Goroutinlerin güvenli bir şekilde değer göndermesine ve almasına izin verirler. İşte bir örnek:
package main import ( "fmt" ) func producer(numbers chan<- int) { for i := 1; i <= 5; i++ { fmt.Println("Produced:", i) numbers <- i } close(numbers) // Close the channel when done } func consumer(numbers <-chan int) { for number := range numbers { fmt.Println("Consumed:", number) } } func main() { numbers := make(chan int) go producer(numbers) go consumer(numbers) // Let the Goroutines finish time.Sleep(1 * time.Second) }
Bu örnekte, sayılar üreten ve bunları bir kanala gönderen bir producer
Goroutine ve kanaldan alınan sayıları işleyen bir consumer
Goroutine oluşturuyoruz. Kanalları kullanarak Goroutinler arasında güvenli iletişim sağlıyoruz.
Goroutines ve Channels kullanan Go'daki eşzamanlılık, eşzamanlı uygulamaların geliştirilmesini basitleştirerek onları daha verimli, güvenilir ve anlaşılması kolay hale getirir.
Go Kodu Yazmak İçin En İyi Uygulamalar
Temiz, sürdürülebilir ve verimli Go kodu yazmak, güçlü uygulamalar geliştirmek ve uzun vadeli başarı sağlamak için çok önemlidir. Go ile çalışırken izlemeniz gereken bazı en iyi uygulamalar şunlardır:
Uygun Adlandırma Kuralları
Adlandırma kuralları, Go kodunuzu anlaşılır ve sürdürülebilir hale getirmede çok önemli bir rol oynar. Go'da adlandırma için şu yönergeleri izleyin:
- Paket adları küçük harf, kısa ve öz olmalıdır. Alt çizgi veya karışık büyük/küçük harf adları kullanmaktan kaçının.
- Değişken, işlev ve yöntem adları camelCase içinde, ilk sözcük hariç her sözcüğün ilk harfi büyük olacak şekilde olmalıdır.
- Diğer paketlerden erişilebilen işlevler, yöntemler ve değişkenler gibi dışa aktarılan tanımlayıcılar büyük harfle başlamalıdır.
- Tanımlandıkları paketle sınırlı olan dışa aktarılmamış tanımlayıcılar küçük harfle başlamalıdır.
Uygun Biçimlendirme
Go kodunuz genelinde tutarlı bir formata bağlı kalmak, onu okumayı ve anlamayı çok daha kolaylaştırır. Go topluluğu, kodunuzu önerilen yönergelere göre otomatik olarak biçimlendiren gofmt adlı bir araç geliştirdi. Kodunuzun tutarlı bir stile bağlı kalmasını sağlamak için bu aracı kullanın.
Kısa ve Odaklanmış İşlevler Yazma
İşlevlerinizin ve yöntemlerinizin kısa olduğundan ve tek bir amaca odaklandığından emin olun. Bu, okunabilirliği, sürdürülebilirliği artırır ve testi basitleştirir. Birçok farklı sorumluluğu olan tek bir işlev yazmak yerine, onu daha küçük, daha spesifik işlevlere bölün. Bu yaklaşım, kodun uygulamanızın farklı bölümlerinde yeniden kullanılmasına da yardımcı olur.
Katı Hata İşleme
Hata işleme, Go programlamanın temel bir yönüdür. Go, istisnalara güvenmek yerine hataları açıkça ele almanızı teşvik eder. Bir işlev bir hata döndürdüğünde, her zaman kontrol edin ve uygun şekilde işleyin. Hataların varlığında programınızın doğru şekilde davranmasını sağlamak için deyimsel if err != nil
kalıbını kullanın. Ek olarak, sizin ve diğer geliştiricilerin sorunları daha kolay tanımlayıp teşhis etmesine yardımcı olmak için hata mesajlarınızda bağlam sağlayın.
Kapsamlı Birim Testleri Yazın
Birim testleri yazmak, Go kodunuzun doğruluğunu ve güvenilirliğini sağlamak için gereklidir. Go, test paketi aracılığıyla test için yerleşik desteğe sahiptir. Davranışlarını doğrulamak ve kodunuzda değişiklik yaparken olası sorunları tespit etmek için tek tek işlevler, yöntemler ve paketler için testler yazın. Hataları önlemek ve kodunuza olan güveni artırmak için bakımı yapılabilir ve kapsamlı testler yazmaya zaman ayırın.
Go Paketlerini ve Kitaplıkları Akıllıca Kullanın
Go, hem standart kitaplıktan hem de daha geniş topluluktan birçok kitaplık ve paket içeren güçlü bir ekosisteme sahiptir. Kitaplıkları kullanırken zamandan tasarruf edebilirsiniz, dış bağımlılıkları seçerken dikkatli olun. Bir karar vermeden önce her zaman saygın, iyi belgelenmiş kitaplıkları tercih edin ve birden çok seçeneği değerlendirin. Ek olarak, olası güvenlik ve performans sorunları için bağımlılık listenizi yönetilebilir ve izlenebilir tutun.
Kodunuzu Belgeleyin
Açık ve öz yorumlar yazın ve kodunuzu Go'nun doc kurallarını kullanarak belgeleyin. Kodunuzu yeterli yorumlar, açıklamalar ve örneklerle belgelemek, uzun vadeli bakım ve ekip çalışması için çok önemlidir.
Go için Popüler Kullanım Örnekleri ve Kitaplıklar
Go, çok sayıda kullanım durumu olan çok yönlü bir programlama dilidir. Go için en popüler uygulama alanlarından bazıları şunlardır:
- Sunucu tarafı programlama ve web hizmetleri
- Ağ ve dağıtık sistemler
- Mikro hizmet mimarisi
- DevOps ve CLI araçları
Go ekosistemindeki ortak geliştirme ihtiyaçlarını karşılayan bazı popüler kitaplıkların ve çerçevelerin bir listesi:
Web Çerçeveleri ve Kitaplıkları
- Gin: Martini benzeri bir API ile hızlı, basit ve hafif bir web çerçevesi.
- Echo: Go için yüksek performanslı, genişletilebilir ve minimalist bir web çerçevesi.
- Revel: Başlamak için yapılandırma veya standart kod gerektirmeyen tam yığın bir web çerçevesi.
API ve Protokol Araçları
- gRPC: Yüksek performanslı, açık kaynaklı evrensel bir RPC çerçevesi.
- Gorilla Mux: Go web uygulamaları ve API'ler oluşturmak için güçlü bir URL yönlendiricisi ve dağıtıcı kitaplığı.
Veritabanı Sürücüleri ve Yardımcıları
- GORM: Go için PostgreSQL , MySQL , SQLite ve daha fazlası gibi çeşitli veritabanı sistemlerini destekleyen harika bir ORM kitaplığı.
- sqlx: Standart paketle uyumluluğu korurken veritabanı işlemlerini basitleştiren ve geliştiren standart veritabanı/sql paketinin bir uzantısı.
Bu kitaplıkların yanı sıra Go standart kitaplığı, ağ oluşturma, G/Ç, veri yapıları, algoritmalar ve daha fazlası gibi çok çeşitli işlevlerle çalışmak için birçok yararlı paket sunar.
Go programlama dilini öğrenmenin ve popüler kitaplıkları/API'leri kullanmanın başarılı bir uygulama oluşturmanın yalnızca bir yönü olduğunu belirtmekte fayda var. Geliştirme sürecinizi gerçekten hızlandırmak ve teknik borcu ortadan kaldırmak için AppMaster'ı denemeyi düşünebilirsiniz. — görsel bir arayüz kullanarak arka uç, web ve mobil uygulamalar oluşturmanıza ve aynı zamanda hiçbir teknik borç olmadan otomatik olarak kaynak kodu oluşturmanıza olanak tanıyan kodsuz bir platform . AppMaster platformuyla Go uygulamalarınız, çok çeşitli işlevleri ve kullanım durumlarını kapsayacak şekilde 10 kata kadar daha hızlı ve 3 kata kadar daha uygun maliyetli geliştirilebilir.