- Değişkenleri
varve:=ile tanımlamak ve farkı açıklamak - Temel türleri ve sıfır değerlerini tanımak
- Türleri açıkça dönüştürmek ve
strconvile dize–sayı dönüşümleri yapmak constveiotaile sabitler oluşturmak
Bir oyun yazdığını düşün. Oyuncunun adını, puanını, seviyesini ve çevrim içi olup olmadığını nerede tutarsın? Değişkenlerde. Go'da her değişkenin kesin bir türü vardır ve derleyici ona uymayan bir değeri yazmana izin vermez. Bu derste değişken ve sabit tanımlamayı, temel türleri ve bunlar arasındaki dönüşümleri öğreneceksin.
Değişken tanımlama
Go'da bir değişken iki şekilde tanımlanabilir. Uzun biçim var anahtar kelimesini kullanır: var age int = 14. Değer verildiyse tür yazılmayabilir; Go onu kendisi belirler. Fonksiyonların içinde ise en çok kısa tanımlama kullanılır: city := "Baku". := yeni bir değişken oluşturur, sıradan = ise var olan bir değişkene yeni değer atar.
package main
import "fmt"
func main() {
var name string = "Leyla"
var age = 14
city := "Baku"
x, y := 3, 4
age = age + 1
x, y = y, x
fmt.Println(name, age, city)
fmt.Println(x, y)
}Leyla 15 Baku 4 3
var count int = 0
var ready bool = false
var title string = "Go course"var count int
var ready bool
title := "Go course"var count int zaten 0'dır. Fonksiyon içinde bir başlangıç değeri gerekiyorsa := kullan.Temel türler ve sıfır değerler
| Tür | Örnek | Sıfır değer | Not |
|---|---|---|---|
int | 42, -7 | 0 | tam sayı; 64 bit sistemlerde 64 bit yer kaplar |
float64 | 3.14 | 0 | ondalık sayı |
string | "Baku" | "" | UTF-8 baytları olarak saklanan metin |
bool | true, false | false | mantıksal değer |
rune | 'ə' | 0 | tek bir Unicode karakteri (int32'nin diğer adı) |
byte | 'A' | 0 | tek bir bayt (uint8'in diğer adı) |
Bunların dışında boyutu açıkça belirtilen türler de vardır: int8, int16, int32, int64, işaretsiz uint, uint8… ve float32. Günlük kodda genellikle int, float64, string ve bool yeterlidir.
Değer verilmeden tanımlanan bir değişkenin otomatik olarak aldığı değer: sayılar için 0, dizeler için boş dize "", bool için false, işaretçiler, dilimler ve map'ler için nil. Go'da hiçbir değişken “rastgele çöp” tutmaz.
package main
import "fmt"
func main() {
var n int
var f float64
var s string
var ok bool
fmt.Println(n, f, ok)
fmt.Printf("%q\n", s)
fmt.Printf("%T %T %T %T\n", 42, 2.5, "hi", 'A')
}0 0 false "" int float64 string int32
%q bir dizeyi tırnak içinde yazar; böylece boş dize görünür hâle gelir. Dikkat: tek tırnaktaki 'A' bir dize değil, bir rune'dur, yani karakterin Unicode numarasıdır. Bu yüzden türü int32 olarak yazdırılır. Türü belirtilmemiş ondalık bir sayı (2.5) her zaman float64 olur.
Tür dönüşümleri ve aritmetik
Go türleri asla gizlice dönüştürmez: bir int ile bir float64 doğrudan toplanamaz. Dönüşüm açıkça yazılır: float64(a), int(x). İki tam sayının bölümü yine tam sayıdır, yani ondalık kısım atılır; % ise kalanı verir. Dizeler ile sayılar arasındaki dönüşümler için strconv paketi vardır: Itoa sayıyı dizeye, Atoi ise dizeyi sayıya çevirir.
package main
import (
"fmt"
"strconv"
)
func main() {
a, b := 7, 2
fmt.Println(a/b, a%b)
fmt.Println(float64(a) / float64(b))
price := 2.5
fmt.Println(price * float64(a))
s := strconv.Itoa(a) + " apples"
fmt.Println(s)
n, err := strconv.Atoi("42")
fmt.Println(n+1, err)
}3 1 3.5 17.5 7 apples 43 <nil>
Atoi iki değer döndürür: sayı ve hata. Dönüşüm başarılı olursa hata nil olur ve Println onu <nil> olarak yazar. Hata yönetimini ileride ayrı bir derste ayrıntılı öğreneceksin.
Dizeler ve karakterler
Go'da bir dize değiştirilemez bir bayt dizisidir ve metin UTF-8 olarak saklanır. Latin harfleri bir bayt, ə, ş ve ı gibi harfler ise iki bayt yer kaplar. Bu yüzden len karakterlerin değil, baytların sayısını döndürür. Karakterleri saymak için unicode/utf8 paketindeki RuneCountInString fonksiyonu vardır. strings paketinde birçok hazır araç bulunur: ToUpper, Contains, Replace, Split, TrimSpace ve daha fazlası.
package main
import (
"fmt"
"strings"
"unicode/utf8"
)
func main() {
city := "Gəncə"
fmt.Println(len(city), utf8.RuneCountInString(city))
fmt.Println(strings.ToUpper(city), strings.Contains(city, "ncə"))
msg := "Welcome to " + city + "!"
fmt.Println(msg)
fmt.Println(strings.Replace(msg, "Welcome to", "Hello from", 1))
fmt.Println(strings.Repeat("=", 10))
}7 5 GƏNCƏ true Welcome to Gəncə! Hello from Gəncə! ==========
Sabitler ve iota
Bir sabit const ile tanımlanır ve program çalışırken değişemez. Sabitler derleme sırasında hesaplanır; bu yüzden değerleri sayı, dize ya da bool gibi basit bir şey olmalıdır. Parantez içindeki bir sabit grubunda iota, 0'dan başlayan ve her satırda 1 artan bir sayaçtır. Bedenler, haftanın günleri ya da durumlar gibi listeler için kullanışlıdır.
package main
import "fmt"
const Pi = 3.14159
const (
Small = iota
Medium
Large
)
func main() {
const greeting = "Hello"
r := 2.0
fmt.Println(greeting, Pi*r*r)
fmt.Println(Small, Medium, Large)
}Hello 12.56636 0 1 2
Önemli noktalar
var x int = 5uzun biçimdir,x := 5fonksiyon içindeki kısa tanımlamadır;=yalnızca var olan bir değişkene değer atar.- Değer verilmeden tanımlanan bir değişken sıfır değerini alır:
0,"",falseya danil. - Go türleri otomatik dönüştürmez:
float64(a),int(x)yaz; tam sayı bölmesi ondalık kısmı atar. strconv.Itoavestrconv.Atoisayı ile dize arasında dönüşüm yapar;lendizenin baytlarını,utf8.RuneCountInStringkarakterlerini sayar.constdeğiştirilemez bir değer tanımlar;iota, sabit grubunda 0'dan başlayan bir sayaçtır.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.
var score int satırından sonra score'un değeri nedir?