1. Değişkenler ve Sabitler
Golang'da, değişkenler ve sabitler, bir programda çok önemli bir rol oynayan iki temel kavramdır.
-
Değişken, bir programa veri depolamak için kullanılan adlandırılmış bir tanımlayıcıdır. Golang'da, değişkenleri bildirmek için
var
anahtar kelimesi kullanılır. -
Sabit, değeri program içinde değiştirilemeyen bir tanımlayıcıdır. Golang'da, sabitleri bildirmek için
const
anahtar kelimesi kullanılır.
2. Golang Değişkenlerin Bildirimi ve Başlatılması
2.1 Tek Bir Değişkenin Bildirimi ve Atanması
Go dilinde, var
anahtar kelimesi, var değişken_adı tip
formatıyla bir değişken bildirmek için kullanılır. Bildirildikten sonra, değişkene sonraki kodda bir değer atanabilir veya direk olarak bildirim anında başlatılabilir. Örneğin:
var age int // Bir tamsayı değişkeni olan age bildir
age = 25 // Değişkene bir değer ata
var name string = "Alice" // Değişken name'i bildir ve başlat
2.2 Birden Fazla Değişkenin Bildirimi
Go dili, birden fazla değişkenin aynı anda bildirilmesini destekler, bu da kodu daha anlaşılır kılabilir. Toplu bildirim genellikle bir fonksiyonun başında veya paket seviyesinde yapılır. Örneğin:
var (
firstName, lastName string
age int
)
firstName = "John"
lastName = "Doe"
age = 30
Yukarıdaki toplu bildirimde, firstName
ve lastName
string olarak, age
ise tamsayı olarak bildirilmiştir.
2.3 Tür Çıkarımı ve Kısa Değişken Bildirimi
Go dilinde, değişkenin tipini her zaman açıkça belirtmek gerekli değildir. Bir değişken bildirilirken başlangıç ifadesi verilirse, Go değişkenin tipini çıkarabilir. Buna tür çıkarımı denir. :=
kullanarak kısa değişken bildirimi, tür çıkarımına dayalı olarak değişkenlerin bildirilmesini ve başlatılmasını basitleştirebilir. Örneğin:
city := "Pekin" // Şehri aynı anda bildir ve başlat
country := "Çin" // country bir string tipi olarak çıkarılır
Kısa değişken bildirimlerinin sadece fonksiyonlar içinde kullanılabileceğini ve global kapsamda kullanılamayacağını belirtmek önemlidir.
2.4 Fonksiyonlar Dışında Değişken Bildirimi
Fonksiyonların dışında bildirilen değişkenler, paket seviyesinde kapsama sahiptir. Bu değişkenler, tüm paket boyunca görünür ve erişilebilirdir. Örneğin:
var globalVar string = "Ben globalim" // global bir değişkenin bildirimi
func printGlobalVar() {
fmt.Println(globalVar) // Fonksiyon içinde global değişkene erişme
}
Global değişkenler, paket içindeki herhangi bir fonksiyon arasında paylaşılabilir, ancak potansiyel isim çakışmaları ve belirsiz referansları önlemek için dikkatlice kullanılmalıdır.
İpucu: Buradaki temel fonksiyon kodlarını anlamak yeterli, fonksiyonların detaylı açıklamaları daha sonraki bölümlerde verilecektir.
3 Temel Veri Tipleri ve Sıfır Değerleri
3.1 Golang'da Temel Veri Tipleri
Go dilinde, her bir değişken türü, açık semantiğe ve davranışsal özelliklere sahiptir. İşte bazı temel veri tipleri:
-
int
,int8
,int16
,int32
,int64
: Farklı tamsayı aralıkları -
uint
,uint8
,uint16
,uint32
,uint64
: İşaretsiz tamsayılar -
float32
,float64
: Ondalık sayılar -
bool
: Boolean değerler (true veya false) -
string
: Dizgiler
3.2 Sıfır Değer Kavramı
Go dilinde, değişkenler, bildirimden sonra türün sıfır değerine otomatik olarak başlatılır. Sıfır değeri, bir değişken açıkça başlatılmadığında, ilgili türün varsayılan değeridir. Bu bazı diğer dillerde alışılmadık olabilir, ancak Go'da, bu durum tüm değişkenlerin her zaman geçerli bir başlangıç değerine sahip olmasını sağlar. İşte her bir temel veri tipinin sıfır değerleri:
- Bir tamsayı için sıfır değer
0
'dır - Bir ondalık sayı için sıfır değer
0.0
'dır - Bir boolean için sıfır değer
false
'dur - Bir dizgi için sıfır değer boş bir dizedir
""
Örneğin:
var i int // Sıfır değeri 0'dır
var f float64 // Sıfır değeri 0.0'dır
var b bool // Sıfır değeri false'dır
var s string // Sıfır değeri ""
Sıfır değer kavramını anlamak çok önemlidir, çünkü bu, değişken başlatma davranışını anlamaya ve null pointer veya başlatılmamış hataları önlemek için kullanılabilir.
4. Değişkenlerin Kapsamı
4.1 Yerel Değişkenler
Yerel değişkenler, bir fonksiyon içinde tanımlanan ve sadece o fonksiyon içinde erişilebilen değişkenlerdir. Fonksiyon parametreleri de yerel değişkenlere dahildir. Oluşturuldukları anda, fonksiyonun yürütülmesi tamamlandığında kadar yerel değişkenler ortadan kaybolur. Bir fonksiyon çağrıldığında, yerel değişkenler yeniden oluşturulur.
func yerelDegiskenOrnegi() {
var yerelDegisken int = 10 // Bu bir yerel değişkendir
fmt.Println(yerelDegisken)
}
func main() {
yerelDegiskenOrnegi() // Çıktı: 10
// fmt.Println(yerelDegisken) // Bu, yerelDegisken'in burada görünür olmamasına neden olur ve derleme hatasına yol açar
}
Yukarıdaki örnekte, yerelDegisken
yalnızca yerelDegiskenOrnegi
fonksiyonu içinde erişilebilir.
4.2 Global Değişkenler
Global değişkenler fonksiyonların dışında tanımlanan ve aynı paket içindeki herhangi bir dosyada erişilebilen değişkenlerdir. Global değişkenleri diğer paketlerde kullanmak istiyorsanız, değişken adının Go'nun erişim kontrol kurallarına uygun olarak büyük harfle başlaması gerekir.
package main
import "fmt"
var globalDegisken int = 20 // Bu bir global değişkendir
func main() {
fmt.Println(globalDegisken) // Çıktı: 20
globaliDegistir()
fmt.Println(globalDegisken) // Çıktı: 30
}
func globaliDegistir() {
globalDegisken = 30 // Global değişkenin değerini değiştir
}
Bu örnekte, globalDegisken
hem main
fonksiyonunda hem de globaliDegistir
fonksiyonunda görünürdür.
5 Sabitlerin Tanımlanması ve Kullanımı
5.1 const
Anahtar Kelimesi
Sabitleri tanımlamak için const
anahtar kelimesini kullanırız. Sabitler, bir kez tanımlandıktan sonra değerleri değiştirilemeyen ve değiştirilemez. Sabitler, tamsayı, kayan noktalı sayılar, mantıksal değerler veya dizeler gibi temel veri tiplerinden herhangi biri olabilir.
const Pi = 3.14 // Bir float sabiti tanımla
const StrSabit string = "Merhaba, Dünya!" // Bir dize sabiti tanımla
func main() {
fmt.Println(Pi)
fmt.Println(StrSabit)
}
5.2 Enum Sabitleri
Go dilinin belirli bir sıralama tipi olmasa da, sıralamayı sağlamak için iota
anahtar kelimesini kullanabilirsiniz. Bir const
bloğu içinde, her ek sabit bildirimi, iota
değerini 1 artırır.
const (
Pazar = iota // 0
Pazartesi // 1
Salı // 2
Çarşamba // 3
Perşembe // 4
Cuma // 5
Cumartesi // 6
)
func main() {
fmt.Println(Pazar) // Çıktı: 0
fmt.Println(Cumartesi) // Çıktı: 6
}
Yukarıdaki kod, haftanın günleri için bir sıralama bildirir. iota
, const
bloğu içinde 0 olarak başlar ve her sonraki bildirimde 1 artar.
5.3 Sabitlerin Kapsamı
Sabitlerin kapsamı değişkenlerle benzerdir. Bir sabit bir fonksiyon içinde tanımlanmışsa, kapsamı o fonksiyonla sınırlıdır. Bir sabit bir fonksiyon dışında (global olarak) tanımlanmışsa, kapsamı tüm pakettir ve ilk harfi büyükse diğer paketlerde erişilebilir.
Sabitlerin kapsamını yönetmek, global kapsam kirliliğini azaltmaya ve programın bakımını ve okunabilirliğini artırmaya yardımcı olur.
const GlobalSabit = "Bu bir global sabittir"
func main() {
const YerelSabit = "Bu bir yerel sabittir"
fmt.Println(GlobalSabit) // Bu geçerlidir
fmt.Println(YerelSabit) // Bu geçerlidir
}
func baskaBirFonksiyon() {
// fmt.Println(YerelSabit) // Bu, derleme hatası: YerelSabit bu fonksiyonda görünür değildir
fmt.Println(GlobalSabit) // Bu geçerlidir
}
Bu örnekte, YerelSabit
yalnızca main
fonksiyonu içinde erişilebilirken, GlobalSabit
tüm paket boyunca erişilebilir.