Selam bu yazımda Go programlama dilini öğrenmeye çalışacağım.
Go popüler bir programlama dilidir. Go bilgisayar programları oluşturmak için kullanılır.
Go Nedir?
- Go her platformda çalışan , açık kaynak kodlu bir programlama dilidir. Mesela ben bu yazıyı hazırlarken Windows, WSL üzerinde Ubuntu ve Linux Lite işletim sistemlerinde çalıştım.
- Go , performansı yüksek uygulamalar geliştirmekte kullanılabilir.
- Go , basitliği ve verimliliği ile öne çıkan hızlı, static typed (yani değişken tiplerini bildirmek zorundasınız) ve derlenerek kullanılan bir programlama dilidir.
- Go , Google'da Robert Griesemer, Rob Pike, ve Ken Thompson tarafından 2007'de geliştirilmiş.
- Go'nun deyim yapısı biraz C++ 'a benzer.
Go Nerede Kullanılır?
- Web geliştirme (server tarafı)
- Network-temelli programlar yazmak
- Her platformda çalışan uygulamalar geliştirme
- Bulut-tabanlı geliştirme
Neden Go Kullanmalı?
- Go , eğlenceli ve öğrenmesi kolaydır
- Go , derleme süresi ve çalışması çok hızlıdır
- Go , eşzamanlı çalışmayı destekler
- Go , bellek yönetimine sahiptir
- Go , birçok platformda çalışır (Windows, Mac, Linux, Raspberry Pi, vs.)
Python ve C++ ile Karşılaştırınca Go
Go | Python | C++ |
---|---|---|
Statically typed | Dynamically typed | Statically typed |
Hızlı çalışma | Yavaş çalışma | Hızlı çalışma |
Derlenen | Yorumlanan | Derlenen |
Hızlı derleme zamanı | Yorumlanan | Yavaş derleme zamanı |
Goroutine'ler ve channel ile eşzamanlı çalışma yapar | Öntanımlı bir eşzamanlı çalışma mekanizması yoktur | Thread'lar ile eşzamanlı çalışma yapar |
Artıkları otomatik toplar | Artıkları otomatik toplar | Artıkları otomatik toplaması yoktur |
class(sınıf) ve object(nesne) desteklemez | class(sınıf) ve object(nesne) destekler | class(sınıf) ve object(nesne) destekler |
Kalıtımı (inheritance) desteklemez | Kalıtımı (inheritance) destekler | Kalıtımı (inheritance) destekler |
Hadi Başlayalım
Go derleyicisi bilgisayarınızda yüklü mü terminalde şunu yazıp cevapına bakalım.
buna cevap olarak örnek
gibi birşey gelmişse hemen başlayabilirsiniz. Sisteminizde Go programlama dili yüklü değilse İndirme Sayfasına gidip oradaki yönergeleri takip edebilirsiniz. Linux sistemlerde paket yöneticisi ile kolayca yüklenebilir.
Bir kod editörüne ihtiyacınız olacak , ben hem Windows hem Linux sistemlerimde VsCode editörünü kullanıyorum örneğin.
İlk Program
Hadi ilk programımızı yazalım
- VS Code editörünü açın (Linux için çalışmak istediğiniz klasörde terminalde "code ." yazarak ya da Windows'ta gezginde klasör içinde sağ tıklayıp "Code ile aç" seçeneğini tıklayarak)
- Eklenti yöneticisini açın
- Arama kutusuna "go" yazıp enter basın
- Google'ın Go takımının yazdığı eklentiyi bulup yükleyin. Bu size kod yazarken çok yardımcı olacaktır.
Şimdi yeni bir dosya üretelim adı da "merhaba.go" olsun. İçine şu kodu yazalım:
Şimdi terminalde şu komutu girip programımızı çalıştırabiliriz:
Terminal için VS Code editörünün terminalini de kullanabilirsiniz, sizin tercihiniz. Program çalışınca terminalde şöyle bir çıktı yazacaktır:
Tebrikler! ilk Go programınız çalışıyor. Programınızı derleyip direk çalışan program haline getirmek için terminalde şu komutu girin:
Artık programınız derlenmiş ve çok daha hızlı çalışmaya hazırdır. Programınız çalıştırmak için terminalde:
yazmanız yeterli olacaktır. Derleme işlemi Linux sistemlerde "merhaba" adında çalıştırılabilir bir dosya Windows sistemlerde ise "merhaba.exe" adında çalıştırılabilir bir dosya oluşturur. Artık bu dosyayı Go programlama dili olmayan başka bilgisayarlarda da kopyalayarak kullanabilirsiniz.
Go Deyim Yapısı (syntax)
Bir Go program dosyası şu parçalardan oluşur:
- package tanımlaması
- import ile paket yüklemeleri
- Fonksiyonlar
- İfadeler ve eşitlikler
Örnek programımıza geri dönelim
Satır 1 : Her Go programı bir paketin parçasıdır. Biz bunu package kelimesini kullanarak belirtiriz. Bu örnekte program main paketine aitttir.
Satır 2 : import ("fmt") ile fmt paketinde bulunan fonksiyonları programımızda kullanacağımızı belirtiyoruz. Bu Go dilinde kullanılan standart paketlerden biri.
Boş satırlar : Go derleyicisi boş satırlarda hiç bir işlem yapmaz. Bunlar sadece programın kodunun daha okunabilir olması amacıyla bırakılır.
Satır 7 : func main() { } yapısı bir fonksiyon tanımlamasıdır. Süslü parantez içinde yazılan her kod çalıştırılacaktır.
Satır 8 : fmt.Println() bizim daha önce import ettiğimiz (programa dahil ettiğimiz) fmt paketinde tanımlı olan bir fonksiyondur. Terminale bir yazı çıktısı yazdırmak için kullanılır, örneğimizde bu fonksiyon terminale Merhaba dünya! yazacaktır.
Not : Go programlama dilinde çalıştırılabilir her program main paketine ait olmalıdır.
Go İfadeleri (Statements)
fmt.Println("Merhaba dünya!") satırı bir ifadedir.
Go'da ifadeler bir alt satıra geçerek ya da sonuna ";" noktalı virgül eklenerek bitirilir.
İfade sonrası enter tuşuna basmak aslında oraya görünmeyen bir noktalı virgül koymak gibidir.
Süslü parantez açılışı { satırda ilk karakter olamaz.
Aşağıdaki kodu çalıştırıp ne olduğuna bir bakın:
karşınıza bir hata mesajı çıkar:
Kompakt Kod Yazmak
Kodunuzu aşağıdaki gibi noktalı virgüllerle ayırarak tek satırda da yazabilirsiniz ancak pek okunabilir bir şey olmaz. Zaten VS Code kullanıyorsanız bu kodu hemen standart okunabilir hale dönüştürür.
Bunu ancak sizden sonra kodu okuyacaklara eziyet olsun diye yapabilirsiniz..
Go Yorumları
Bir yorum , kod çalıştırılırken anlam ifade etmeyecek olan yazıdır.
Yorumlar kodunuzda yaptıklarınızı ve yapacaklarınızı anlatmak amaçlı kısa yazılar olabilir.
Yorum yapısı aynı zamanda kodun bir kısmının çalışmasını istemediğinizde, silmeden o kodları yoruma çevirerek işlemesini engellemek için de kullanılır.
Go dili tek ya da çok satırlı yorumları destekler.
Tek Satır Yorumlar
Tek satır yorumlar iki tane bölü işareti ile başlar ( // ).
// karakterlerinden sonra satır sonuna kadar olan yazılar derleyici tarafından işlenmez.
Ayrıca kod satırı sonrasına da aynı şekilde yorum eklenebilir.
Çok Satırlı Yorumlar
Çok satırlı yorumlar /* ile başlar ve */ ile biter.
/* ve */ arasındaki tüm yazılanlar derleyici tarafından kaale alınmaz.
gibi.
Not : Her şey size göre değişir ama genelde // kısa yorumlarda ve /* - */ yapısı uzun yorumlarda kullanılır.
Kodun bir kısmının çalışmasını engellemek için yoruma atmak
Denemeler yaparken yorumları, kodunuzun bir kısmının çalışmasını engellemek için de kullanabilirsiniz.
"Yoruma atmak" denilen bu işlem daha sonra lazım olacak kodları ya da iptal edilen kısımları silmeden saklamak için kullanılabilir.
Go Değişkenleri
Her programlama dilinde verilerin değerlerini saklamak için değişkenler kullanılır.
Değişken Tipleri
Go dilinde bir çok değişken tipi vardır, örnek:
- int - Tamsayı (integer) değerleri saklamak için kullanılan tipdir. Örneğin 123 ya da -789
- float32 - Kayan noktalı sayıları saklamak için kullanılır. Örneğin 19.99 ya da -123.45
- string - Yazıları saklar. Mesela "Merhaba dünya!". String değerler çift tırnak ile çevrelenmiş ifade edilmelidir.
- bool - Doğru/yanlış ifade eden değerleri saklar, değeri true ya da false olur.
Daha bir çok değişken tipi var ancak şimdilik onlara girmiyoruz.
Bir Değişken Tanımlamak
Go dilinde yeni bir değişkeni tanımlamak için 2 yöntem vardır.
1 - var kelimesi kullanarak
var kelimesini ardından değişken adı ve tipi gelecek şekilde kullanırsınız.
Not : Her zaman tipi ya da değeri (veya her ikisini de) girmeniz gereklidir.
2 - := işareti ile
:= işaretini bir değer girerek kullanırsınız.
Not : Bu durumda değişken tipi tahmin edilir ( yani derleyici girilen değere göre değişken tipini tahmin eder ).
Not : Bu şekil tanımlamada mutlaka bir değer girilmesi zorunludur , tabii ki..
İlk Değer Vererek Değişken Tanımlama
Eğer değişkenin değerinin program başladığında ne olması gerektiğini biliyorsanız tanımlama yaparken bir değer vererek yaparsınız:
Not : öğrenci2 ve x değişkenlerinin tipleri değerlerinden tahmin edilir.
İlk Değer Girmeden Değişken Tanımlamak
Go dilinde tüm değişkenler başlangıç değerine sahiptir. Eğer siz bir değer girmediyseniz derleyici değişken tipine ait default değeri verecektir.
Bu örnekte 3 tane değişken tanımlanmış
- a
- b
- c
Bu değişkenler tanımlanmış fakat ilk değerleri verilmemiş.
Bu kodu çalıştırınca ekrana bu 3 değişkenin default değerleri yazılacaktır.
- a için "" (yani boş string)
- b için 0
- c için false
Tanımlamadan Sonra Değer Atamak
Bir değişkeni tanımladıktan sonraki satırlarda da değer atamak mümkündür. Bu başlangıçta değeri bilinemeyen değişkenler için kullanılır.
Not : Bir kez daha belirtelim ":=" işareti ile değişken tanımlarsak bir değer girmek zorundayız.
var Kelimesi ve := İşareti Arasındaki Fark
var kelimesi ve := işareti arasında küçük farklar vardır.
var | := |
---|---|
Fonksiyonların içinde ya da dışında kullanılabilir | Fonksiyonların sadece içinde kullanılabilir |
Değişken tanımlaması ve değer ataması ayrı yapılabilir | Değişken tanımlaması ve değer ataması ayrı yapılamaz (aynı satırda yapılmalıdır) |
Bu örnek var kelimesinin fonksiyon dışında kullanımını gösteriyor.
Aşağıdaki örnekte := fonksiyon dışında kullanıldığı için hata verecektir.
Kodu çalıştırınca alacağımız hata mesajı:
Çoklu Değişken Tanımlamaları
Go dilinde aynı satırda birden çok değişkeni tanımlamak da mümkündür.
Not : Eğer tip belirtme kelimesi kullanırsanız satırda tanımlanan tüm değişkenler tek bir tipte olabilir.
Eğer tip belirtilmezse aynı satırda değişik tiplerde değişken tanımlanabilir.
Blok İçerisinde Değişkenleri Tanımlama
Kodunuzun okunurluğunu arttırmak için değişken tanımlarınızı bir blok içinde de yapabilirsiniz.
Değişken İsimlendirme Kuralları
Bir değişkenin kısa bir adı olabilir (mesela x ya da y) veya daha açıklayıcı bir adı da olabilir (yaş, fiyat, isim gibi).
İsimlendirme yaparken belli kurallara uymamız gerekir:
- Bir değişken ismi , bir harf ya da alt çizgi ( _ ) ile başlamalıdır.
- Bir değişken ismi rakamla başlayamaz.
- Bir değişken isminde sadece alfa-nümerik karakterler ve alt çizgi olabilir ( a-z, A-Z, 0-9, ve _ ).
- Değişken isimleri büyük/küçük harf duyarlıdır ( fiyat, Fiyat ve FIYAT ayrı değişkenlerdir).
- Değişken ismi uzunluğunda sınırlama yoktur (uzunkavaklaraltındayataruyumazoğlu adında değişkeniniz olabilir mesela).
- Bir değişken ismi içinde boşluk bırakılmaz.
- Go dilinde kullanılan deyimler değişken ismi olamaz.
Çok Kelimeli Değişken İsimleri
Birden fazla kelimeden oluşan değişken isimlerini aralara boşluk koymadan yazmak için çeşitli öneriler vardır:
Camel Case
İlk kelime hariç tüm kelimelerin ilk harfleri büyük yazılır.
Pascal Case
Tüm kelimeler büyük harfle başlar, küçük harf devam eder.
Snake Case
Kelimeler arasına alt çizgi konarak yazılır.
Herhalde Ruby programlama dilinde çok aşina olduğum için ben bu snake case'i daha okunabilir buluyorum.
Go Sabitleri
Bir değer program çalışırken hiç değişmeyecek ve aynı kalacaksa bunu bir değişken değil sabit olarak tanımlarız. Sabit değerleri program içinde kullanıldığı yerlere de direk yazabiliriz ama ileride değeri değiştirmek için nerelerde kullanıldığını tek tek hatırlamamız zor olur. Bu yüzden bir isim vererek program başında tanımlamamız doğru olacaktır.
Sabit değerleri tanımlamak için const kelimesi kullanılır. const kelimesi bu değerin constant-sabit olduğunu ve bir daha değiştirilemeyeceğini belirtir.
Not : Sabitin değeri mutlaka tanımlamasının yapıldığı satırda girilmelidir.
Go Bir Sabit Tanımlamak
Örnekte Go dilinde bir sabitin tanımlanması ve kullanımı görülüyor.
Go Sabit İsim Kuralları
- Sabit isimleri için değişken isimleri için verilen kurallar aynen geçerlidir.
- Sabit isimlerinin tümü büyük harf yazılması tavsiye edilir (değişkenlerden ayrı algılanması için)
- Sabitler fonksiyon içinde veya dışında tanımlanabilirler.
Sabitlerin Veri Tipleri
İki çeşit sabit vardır
- Tipi girilmiş sabitler
- Tipi girilmemiş sabitler
Go Tipi Girilmiş Sabitler
Bunları tanımlarken değerleri için bir tip belirtilir.
Go Tipi Girilmemiş Sabitler
Eğer tanımlamada bir veri tipi belirtmezsek derleyici atadığımız değere göre bir tip belirleyecektir.
Go Sabitler: Değiştirilemez ve Sadece-Okunur
Bir sabiti tanımladıktan sonra değerini değiştirmek mümkün değildir.
Bu programı çalıştırınca bize bir hata mesajı verir:
Go Çoklu Sabit Tanımlaması
Birçok sabiti bir blok içinde tanımlayarak kodumuzun okunabilirliğini arttırabiliriz:
Go Çıktı Fonksiyonları
Terminale yazı çıktısı yapmak için 3 temel fonksiyon kullanılır.
- Print()
- Println()
- Printf()
Go Print() Fonksiyonu
Print() fonksiyonu argümanında verilen değeri (parantez içinde girilenler) default formatında çıktıya (terminale) yazar.
Örnekte değişkenler i ve j değerleri yazdırılıyor:
Programı çalıştırınca şuna benzer çıktı verir:
Print() fonksiyonu yazımı bitince kursörü alt satıra geçirmez. Bu yüzden alt satıra geçirme işlemini biz kodumuza ilave ile yapmalıyız. Bu amaçla alt satıra geçilmesini istediğimiz yerlere "\n" karakterlerini ekleriz.
Şimdi çıktımız şöyle görünür:
\n karakterleri terminale yazdırılırken sanki kendimiz yazarken enter basmışız gibi yeni satıra geçirecektir. Böyle başka özel karakter dizilimleri de var, ilerde öğreniriz inşallah.
Şimdi şunu deneyelim:
ve çıktımız:
Kelimelerin arasına boşluk eklememiz de gerekecek.
çıktısı:
evet oldu şimdi.
Print() fonksiyonu eğer parametrelerde verilen değerlerin hepsi de string değilse araya otomatik boşluk ekler:
Bir örnek daha:
ve çıktısı:
Sadece her ikisi de string olmayan 7 değeri ve i değişkeni değerini yazarken araya boşluk koydu. Herhangi bir tarafta string varsa arada boşluk verilmiyor.
Go Println() Fonksiyonu
Println() fonksiyonunun yaptığı Print() fonksiyonuna benzer ama bu parametrelerin arasına yazarken boşluk verdiği gibi en sona da alt satıra geçiş ekler.
Bu kodun çıktısı:
Madem böyle oluyordu niye uğraştık o kadar az önce?
Her ikisinin de kullanım yeri ayrı. Println() ile terminalde satırı işgal eden çıktılar alırken Print() fonksiyonlarını akıllı kullanarak ekranda tablo şeklinde yerleştirmeler yapabiliriz mesela.
Go Printf() Fonksiyonu
Bu çok daha kapsamlı bir fonksiyon. Bu fonksiyonu kullanarak değişken değerlerini yazdırırken formatı (yazım düzenini) belirterek istediğimiz şekilde görünmesini sağlarız.
Örnek 2 format yazımı verelim:
- %v ile parametrede verilen değişkenin değeri yazılır
- %T ile parametrede verilen değişkenin tipi yazılır
Örnek:
önce kodu çalıştıralım, çıktı şöyle olur:
İlk parametre olan yazının içinde %v olan yere yazının ardından gelen ilk değer olan i değişkeni değeri yazılıyor. %T olan yere ise yazının ardından gelen ikinci değer olan yine i değişkenin tipi geliyor. İlk parametrede verilen yazının içine formatlama karakterlerimize göre daha sonra verilen değerler enjekte ediliyor.
Şöyle de yazsak nasıl olur?
Çıktısı:
Sırasıyla i, j, i ve j değerlerini yazının içine enjekte ediyor. Kullanıcıya daha anlamlı mesajlar verirken çok kullanacağımız bir fonksiyon.
Go Printf() ile Kullanılan Formatlama Terimleri
Go dili Printf() fonksiyonu ile kullanılacak bir çok formatlama terimine sahip.
Go Genel Formatlama Terimleri
Aşağıdaki ifadeler tüm veri tipleri ile kullanılabilir:
Terim | Açıklaması |
---|---|
%v | Değeri default yazım formatında yazar |
%#v | Değeri Go deyimi formatında yazar |
%T (büyük T!) | Değerin veri tipini yazar |
%% | Yazı olarak bir tane "%" karakteri yazmak için böyle 2 tane konur |
Örnek verirsek:
çıktı şöyle olacaktır:
Go Tamsayı Formatlama Terimleri
Aşağıdaki ifadeler tamsayı (int) veri tiplerinde Printf() fonksiyonu ile kullanılabilir:
Terim | Açıklaması |
---|---|
%b | 2'li sistem (binary) |
%d | 10'luk sistem |
%+d | 10'luk sistem ve her zaman işareti yazılır |
%o | 8'li sistem (octal) |
%O | 8'li sistem ve öncesinde "0o" yazısı ile |
%x | 16'lı sistem ve küçük harf (hexadecimal) |
%X | 16'lı sistem ve büyük harf |
%#X | 16'lı sistem ve öncesinde "0x" yazısı ile |
%4d | Değer 4 karakter genişliğinde yazılır, rakam olmayan yer boşluk bırakılır (sağa hizalanmış) |
%-4d | Değer 4 karakter genişliğinde yazılır, rakam olmayan yer boşluk bırakılır (sola hizalanmış) |
%04d | Değer 4 karakter genişliğinde yazılır, rakam olmayan yere solda sıfırlar yazılır |
Örnek Verelim.
ve çıktısı:
Go String Formatlama Terimleri
Aşağıdaki ifadeler string veri tipleri yazdırılırken kullanılabilir.
Terim | Açıklaması |
---|---|
%s | Değeri düz yazı olarak yazar |
%q | Değeri çift tırnak içinde yazar |
%8s | Değeri 8 karakter genişliğinde yazar ve sağa hizalar |
%-8s | Değeri 8 karakter genişliğinde yazar ve sola hizalar |
%x | Değerdeki karakterlerin hex kodlarını yazar |
% x | Değerdeki karakterlerin hex kodlarını aralarda boşluk ile yazar |
Örnek verelim:
ve çıktısı:
Go Boolean Formatlama Terimleri
Aşağıdaki ifade boolean değerleri göstermek için kullanılır.
Terim | Açıklaması |
---|---|
%t | Değeri true ya da false olarak yazar (%v kullanımı gibidir) |
Örnek.
ve sonuç:
Go Kayan Noktalı Sayı (Float) Format Terimleri
Float veri tipiyle aşağıdaki formatlama terimleri kullanılabilir.
Terim | Açıklaması |
---|---|
%e | Bilimsel logaritmik ifade. 10 üzeri şeklinde ifade |
%f | Desimal noktalı standart ifade (10 üzeri yok) |
%.2f | Desimal noktalı standart ifade ve virgülden sonra 2 basamak gösterilir |
%6.2f | 6 karakter genişliğinde ve virgülden sonra 2 basamak gösterilir |
%g | Desimal noktalı standart ifade ve gerekirse 10 üzeri bilgisi |
Örnek verelim.
ve çıktısı:
Go Veri Tipleri
Bir programlama dilinde veri tipleri önemli konulardan biridir. Veri tipi bir değişkenin değer boyutunu ve tipini belirler.
Go dili static typed bir dildir, yani bir değişkeni bir veri tipinde belirttikten sonra artık onun veri tipini değiştiremez , içine başka tipte bir değer yazamazsınız.
Go'da 3 tane basit veri tipi vardır:
- bool : Boolean bir değer ifade eder true ya da false olabilir (doğru ya da yanlış)
- Sayısal : Bunlar tamsayı, kayan noktalı sayı ya da komplex sayılar olabilir
- string : Yazı içeren veri tipidir
Aşağıdaki örnek Go dilindeki çeşitli veri tiplerini gösteriyor.
Go Boolean Veri Tipi
Bir boolean veri tipi değişken bool kelimesi ile ifade edilir ve sadece 2 değeri olabilir - true ya da false.
Boolean veri tipleri için default değer false'dur.
Örnekte değişik boolean veri tipi tanımlama teknikleri görülüyor.
Boolean değerleri ileride karşılaştırmalar bölümünde oldukça çok kullanacağız.
Go Integer /Tamsayı) Veri Tipi
Integer veri tipleri virgülden sonrası olmayan tamsayıları saklamak için kullanılır. Örneğin 35, -50, veya 1345000.
Tamsayı veri tiplerinin iki kategorisi vardır:
- İşaretli Tamsayılar (signed integer) : Pozitif veya negatif değer içerebilirler
- İşaretsiz Tamsayılar (unsigned) : Sıfır ve pozitif değerler olabilir (yani negatif olmayan)
İpucu : Tamsayı için default tip int'dir, tip belirtmeden değer verince sistem onu int olarak alır.
Go İşaretli Tamsayılar
İşaretli tamsayılar birçok int kelimelerinden biri ile ifade edilir ve hem pozitif hem negatif (ki bizim için tamsayı zaten budur, pozitiflere "sayma sayısı" deriz) değer alabilir.
Örnek olarak:
ve çıktısı:
Tamsayılar için Go dilinde 5 değişik int kelimesi kullanılır.
Tip | Boyut | Sınırları |
---|---|---|
int | Platforma bağlı 32 bit sistemde 32 bit , 64 bit sistemde 64 bit uzunluk | 32 bit sistemlerde -2147483648 ila 2147483647 ve 64 bit sistemlerde -9223372036854775808 ila 9223372036854775807 |
int8 | 8 bit / 1 bayt | -128 ila +127 |
int16 | 16 bit / 2 bayt | -32768 ila +32767 |
int32 | 32 bit / 4 bayt | -2147483648 ila 2147483647 |
int64 | 64 bit / 8 bayt | -9223372036854775808 ila 9223372036854775807 |
Go İşaretsiz Tamsayılar
İşaretsiz tamsayılar birçok uint kelimelerinden biri ile ifade edilir ve negatif olmayan değerleri alabilir.
Örnek olarak:
ve sonuç :
İşaretsiz tamsayılar için Go dilinde 5 değişik uint kelimesi kullanılır.
Tip | Boyut | Sınırları |
---|---|---|
uint | Platforma bağlı 32 bit sistemde 32 bit , 64 bit sistemde 64 bit uzunluk | 32 bit sistemlerde 0 ila 4294967295 ve 64 bit sistemlerde 0 to 18446744073709551615 |
uint8 | 8 bit / 1 bayt | 0 ila 255 |
uint16 | 16 bit / 2 bayt | 0 ila 65535 |
uint32 | 32 bit / 4 bayt | 0 ila 4294967295 |
uint64 | 64 bit / 8 bayt | 0 ila 18446744073709551615 |
Hangi Tamsayı Tipini Kullanmalı?
Değişkene hangi tamsayı tipini seçeceğiniz içinde saklaması olası değerlere göre yapılmalıdır.
Örneğin aşağıdaki kod hata verir çünkü 1000 değeri int8 tipinin sınırlarından dışarıdadır.
Çalıştırınca şu hata mesajı verilir:
Go Float (Kayan Noktalı) Veri Tipleri
Go dilinde float veri tipleri noktalı sayıları tanımlamak için kullanılır, örneğin 35.3, -2.34, or 3597.34987 gibi.
Bu arada kısa bir not, hemen tüm programlama dillerinde desimal sayılar noktalı olarak yazılır. Türkçe'de bunu virgüllü kullanan ve uluslar arası standartlara da virgül ile ayrılır diye bildiren kim varsa rabbim bildiği gibi yapsın, her programlama dilinde illa başımıza bela olur, bu nokta-virgül meselesi..
float veri tipinin 2 tane ifadesi vardır.
Tip | Boyut | Sınırları |
---|---|---|
float32 | 32 bit | -3.4e+38 ila 3.4e+38 |
float64 | 64 bit | -1.7e+308 ila +1.7e+308 |
Not: Eğer tip belirtmezseniz default olarak sistem float64 kabul eder.
Go float32 Kelimesi
Aşağıdaki örnekte float32 veri tipinde tanımlamalar görülüyor.
ve çıktısı:
Go float64 Kelimesi
float64 tipi ile float32'den daha büyük değerleri saklayabilirsiniz.
Örnek:
Hangi float tipini Kullanmalı?
Tabii ki içinde saklanması olası değerlerin sınırına göre. Aşağıda hata verecek bir örnek var.
ve hata mesajı:
Go string Veri Tipi
string veri tipi karakter dizilerinden oluşan değerleri (yani yazıları) saklamaya yarar. String değerler girilirken çift tırnak içinde verilmelidir. Yoksa derleyici onları değişken adı ya da bir komut olarak bulmaya çalışacak, bulamazsa hata verecek, bulursa saçma şeyler yapacaktır.
Örnek verelim.
ve sonucu:
Go Array'ler (değerler grubu)
Array'ler aynı veri tipine sahip birçok değeri her biri için ayrı değişken tanımlamak yerine bir tek değişken içinde saklamak için kullanılır.
Go Array Tanımlamak
Go dilinde bir array tanımlamanın 2 ayrı yöntemi vardır.
1 - var kelimesi kullanarak
Uzunluk (length) array içindeki değerlerin sayısıdır. Uzunluk girilmeyecekse köşeli parantez içine "..." (üç nokta yan yana) yazılır. Her iki şekilde de değerler yazıldığına göre uzunluk girmeye gerek yok bence.
2 - := işareti kullanarak
Not : uzunluk array içinde saklanan değerlerin sayısıdır. Go dilinde array'ler sabit uzunluktadır, belirlenen uzunluk sonradan değiştirilemez.
Bir örnek verelim.
Çıktımız şöyle olacaktır:
Uzunluk değeri verilmeden bir örnek.
ve çıktısı :
Bu örnekte de string değerlerden oluşan bir array kullanılıyor.
ve çıktısı :
Go Array Elemanlarına Ulaşmak
Bir array'in elemanlarına (yani içinde saklanan değerlere) index değeri kullanarak erişilir.
Go dilinde (ve bir çok diğer programlama dillerinde) index değeri sıfırdan başlar. Yani ilk eleman [0] index değeri ile ikinci ise [1] index değeri ile seçilir , sırayla devam eder.
Aşağıdaki örnekte fiyatlar içinden birinci ve üçüncü değere (elemana) erişiliyor.
ve sonuç :
Array ismi yanında bitişik olarak köşeli parantez içinde index numarası girilince o değer seçilmiş oluyor. Bu teknik hemen tüm dillerde kullanılır.
Bir Array Elemanını Değiştirmek
Yine index kullanarak bir array elemanı değerini de değiştirebiliriz.
Bu örnekte fiyatlar dizisinin üçüncü elemanı değiştiriliyor.
ve sonuç :
Go Array İlk Değerleri Vermek
Eğer array tanımlanırken değerler verilmezse (ki böyle yapmak da olasıdır) verilen veri tipine göre default değerler elemanlara otomatik olarak verilir.
İpucu : int tipi için default değer 0, string değeri için default değer "" dir.
Örnek verelim.
Sonuçta verilmeyen değerler sıfır olarak gelir.
Sadece Belirli Elemanlar İlk Değer Vermek
Bir array içinde sadece istediğimiz elemanlara ilk değer vermek de mümkündür.
Aşağıdaki örnek sadece ikinci ve üçüncü elemanlara ilk değer veriyor.
Sonuç :
Yukarıdaki array 5 elemana sahip olarak tanımlanmış.
- 1:10 anlamı : 10 değerini 1 indexli elemana (ikinci eleman) verir
- 2:40 anlamı : 40 değerini 2 indexli elemana (üçüncü eleman) verir
Go Array Uzunluğunun Bulunması
len() fonksiyonu bir array'in uzunluğunu bilmek için kullanılır.
Örnek :
ve sonuç :
len() metoduna parametre olarak uzunluğunu öğrenmek istediğimiz array adını yazarız, dönen değeri amacımıza göre kullanırız.
Go Slice Tipi
Slice'lar array'lere benzer ancak daha güçlü ve esnektirler.
Array gibi slice da aynı veri tipinden bir çok değeri tek değişkende saklamak için kullanılır.
Bununla beraber , array'den farklı olarak , slice uzunluğu büyüyebilir ya da küçülebilir.
Go dilinde slice tanımlamak için çeşitli yöntemler kullanılır.
- []veritipi{değerler} yapısı kullanarak
- Bir array'den slice'a dönüştürerek
- make() fonksiyonunu kullanarak
Go'da []veritipi{değerler} yapısı ile sclice tanımlamak
Deyim yapısı :
Genel kullanımına bir örnek :
Yukarıdaki kod, uzunluğu 0 ve kapasitesi 0 olan boş bir tamsayı slice tanımlar.
Değerler vererek tanımlamak istersek :
Burada da uzunluğu ve kapasitesi 3 olan bir tamsayı slice tanımlanmış.
Go dilinde bir slice'ın uzunluğu ve kapasitesini bulmak için iki fonksiyon kullanılır.
- len() fonksiyonu - Aynı array gibi slice'ın uzunluğunu (içindeki eleman sayısını) verir
- cap() fonksiyonu - Slice'ın kapasitesini (genişleyebileceği veya küçülebileceği eleman sayısı) verir
Aşağıdaki örneklerde []veritipi{değerler} yapısı kullanarak yapılan slice tanımlamaları görülüyor.
sonuç :
Örnekte slice1 için değerler verilmemiş , yani hem uzunluk hem de kapasite sıfır oluyor. slice2'de ise eleman değerleri girilmiş, böylece uzunluk ve kapasite verilen değer sayısı kadar yani 4 oluyor.
Go bir Array'den Slice Tanımlamak
Daha önce verilmiş bir array değişkeni kullanarak da slice tanımlayabilirsiniz.
Deyim yapısı şöyle :
Aşağıdaki örnek bir array'den slice tanımlamasını gösteriyor.
ve çıktısı :
Örnekte slice1 değişkeni uzunluğu 6 olan arr1 array'inden üretiliyor.
[2:4] değerleri bize 2 indexli elemandan (yani 12 değerli olan) başlayarak 4 indexli elemana kadar değerlerin alınacağını belirtiyor. Önemli nokta 2 indexli eleman alınırken 4 indexli alınmıyor dikkat ediniz. Sadece 2 ve 3 indexliler alınıyor. Sonuçta elde edilen slice kapasitesi ise array'in 2 indexli elemanından sonuna kadar olan eleman sayısı yani 4 oluyor.
Eğer slice index 1'den itibaren başlasa kapasite 5, eğer index 0'dan başlasa kapasite 6 olacaktı.
Bu kapasite işi biraz karışık örneklerle göstermeden anlaması zor. İlk önce şunu söyleyelim biz aslında array'den dönüştürürken 2 indexliden itibaren hepsini aldık ama sadece 2 elemanla uzunluğu sınırladık.
Örneğin şöyle yapalım :
çıktısı :
Ooo bizim değerler hala orada duruyormuş sadece uzunluk değerini değiştirince tüm değerler geldi.
Go dilinin kendi sitesinde şöyle bir örnek de verilmiş.
ve sonuç :
Sanırım biraz daha netleşti.
make() Fonksiyonu ile Slice Tanımlamak
make() fonksiyonu yardımıyla da bir slice tanımlanabilir.
Deyim yapısı :
Not : Eğer kapasite parametresi girilmezse uzunluk ile eşit yapılır.
Örnekte make() fonksiyonu ile slice tanımlamaları görülüyor.
sonuç :
Go Slice Elemanlarına Erişmek
Aynı array gibi slice elemanlarına da index değeri kullanarak erişilir.
Go dilinde index değerleri sıfırdan başlar. Yani [0] ilk elemanı belirtir [1] ikinci elemanı vs.
Örnekte fiyatlar slice değişkeninin ilk ve üçüncü elemanlarına erişiliyor.
ve sonuç :
Go Slice Elemanı Değerini Değiştirmek
Aynı şekilde index kullanarak bir slice elemanı değerini değiştirebiliriz.
Örnekte slice'ın üçüncü elemanının değeri değiştiriliyor.
ve çıktısı :
Go Bir Slice'a Eleman Eklemek
Bir slice'a eleman eklemek için append() fonksiyonu kullanılır.
Deyim yapısı :
Örnek :
ve sonuç :
Burada kapasite 2 tane slice birleşmiş gibi artıyor. 6 elemanlı slice'a 2 tane değer ekleniyor ama kapasite 6'nın iki katı olan 12 oluyor. Peki, 8 tane değer eklesek? İşler tam çorba oluyor.
Biraz inceledim, slice'lar aslında hafızada kapasite kadar bir yer işgal ediyor ama uzunluk kadarına erişilebiliyor. Bir array'den slice üretirken de sadece array hafızasının bir kısmını gösteriyor, yani slice ürettikten sonra array elemanını değiştirirseniz bundan üretilen slice elemanı da değişiyor.
Alın size daha kafa karıştıran örnek.
ve çıktısı :
Sindire sindire inceleyin hala array ile aynı hafıza bölgesini kullanıyor.
Neyse , geçelim..
Bir slice'ı Diğerine Eklemek
append() fonksiyonunun bir başka kullanımı da iki slice değişkeni birleştirmek.
Deyim yapısı :
Not : ikinci slice adının arkasına bitişik yazılan üç nokta (...) slice'ları birleştirirken yazılması zorunlu bir notasyondur. Herhalde derleyiciye slice'ları birleştiriyorsun değer eklemesi yapmıyorsun demek için.
Örnek :
ve çıktısı :
O 3 noktayı oraya yazmazsanız derleyici hata mesajı verecektir.
Go bir sliceîn Uzunluğunu Değiştirmek
Bunu daha önce bir örnekte yapmıştık. Array'lerin aksine slice'ların uzunlukları değişebilir.
Örneğimizde slice uzunluklarının değiştirilmesi gösteriliyor.
sonuç :
Hafıza Verimliliği
Slice kullanırken daha önce incelerken fark ettiğimiz gibi Go dili tüm kapasite içindeki elemanları hafızada saklıyor.
Eğer slice değişkeni elde ettiğiniz array çok büyük ama alacağınız birkaç değerse copy() fonksiyonunu kullanmanız hafıza kullanımı için daha verimli olacaktır.
copy() fonksiyonu sadece gereken elemanlardan oluşan bir alt array oluşturarak ondaki değerleri kopyalar.
Deyim yapısı :
copy() fonksiyonu parametrelerinde hedef ve kaynak adı verilen iki slice alır ve kaynak içindeki elemanları hedef içine kopyalar.
Örnek :
ve sonuç :
copy() fonksiyonu ile ayrıca yeni üretilen slice ile orjinal arasında değer bağlantısı da kesilir. Örneğin ilk slice değerlerinden birini değiştirelim.
çıktısı :
Gördüğümüz gibi sayılar elemanı değeri değişince gerekenler elemanı da beraberinde değişirken kopyalananlar elemanı değeri değişmiyor. O artık ilk slice'dan başka bir hafıza bölgesini gösteriyor.
Yazı çık uzadı , devam etmeden önce bu kadarını bir yayınlayalım sonra devam ederiz. Kalın sağlıcakla..
Hiç yorum yok:
Yorum Gönder