- Dəyişənləri
varvə:=ilə elan etmək və fərqini izah etmək - Əsas tipləri və onların sıfır qiymətlərini tanımaq
- Tipləri açıq şəkildə çevirmək və
strconvilə sətir–ədəd çevirmələri etmək constvəiotailə sabitlər yaratmaq
Tutaq ki, oyun yazırsan. Oyunçunun adını, xallarını, səviyyəsini və onlayn olub-olmadığını harada saxlamalı? Dəyişənlərdə. Go-da hər dəyişənin dəqiq tipi var və kompilyator ona uyğun olmayan qiyməti yazmağa icazə vermir. Bu dərsdə dəyişən və sabitləri elan etməyi, əsas tipləri və onların çevrilməsini öyrənəcəksən.
Dəyişənləri elan etmək
Go-da dəyişəni iki yolla elan etmək olar. Uzun forma var açar sözü ilə yazılır: var age int = 14. Qiymət verilibsə, tipi yazmamaq da olar — Go onu özü müəyyən edir. Funksiyaların içində isə ən çox qısa elan işlədilir: city := "Baku". := yeni dəyişən yaradır, adi = isə artıq mövcud dəyişənə yeni qiymət verir.
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 artıq 0-dır. Başlanğıc qiymət lazımdırsa, funksiyanın içində := işlət.Əsas tiplər və sıfır qiymətlər
| Tip | Nümunə | Sıfır qiymət | Qeyd |
|---|---|---|---|
int | 42, -7 | 0 | tam ədəd; 64 bitli sistemlərdə 64 bit tutur |
float64 | 3.14 | 0 | kəsr ədəd |
string | "Baku" | "" | mətn, UTF-8 baytları şəklində |
bool | true, false | false | məntiqi qiymət |
rune | 'ə' | 0 | bir Unicode simvolu (int32-nin başqa adı) |
byte | 'A' | 0 | bir bayt (uint8-in başqa adı) |
Bundan başqa ölçüsü dəqiq göstərilən tiplər də var: int8, int16, int32, int64, işarəsiz uint, uint8… və float32. Gündəlik işdə adətən int, float64, string və bool kifayət edir.
Qiymət verilmədən elan olunan dəyişənin avtomatik aldığı qiymət: ədədlər üçün 0, sətir üçün boş sətir "", bool üçün false, göstəricilər, dilimlər və xəritələr üçün nil. Go-da «təsadüfi zibil» saxlayan dəyişən olmur.
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 sətri dırnaq içində göstərir — belə boş sətri görmək asandır. Diqqət et: tək dırnaqdakı 'A' sətir deyil, rune-dur, yəni simvolun Unicode nömrəsi. Ona görə onun tipi int32 kimi çap olunur. Tipi göstərilməyən kəsr ədəd (2.5) həmişə float64 olur.
Tip çevirmələri və hesab əməlləri
Go tipləri heç vaxt gizlicə çevirmir: int ilə float64-ü birbaşa toplamaq olmur. Çevirmə açıq yazılır: float64(a), int(x). İki tam ədədin bölünməsi yenə tam ədəddir — kəsr hissə atılır, % isə qalığı verir. Sətir ilə ədəd arasında çevirmə üçün strconv paketi var: Itoa ədədi sətrə, Atoi isə sətri ədədə ç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 qiymət qaytarır: ədəd və xəta. Çevirmə uğurlu olanda xəta nil olur və Println onu <nil> kimi çap edir. Xətalarla işləməyi ayrıca dərsdə ətraflı öyrənəcəksən.
Sətirlər və simvollar
Go-da sətir dəyişməz baytlar ardıcıllığıdır və mətn UTF-8 kodlaşdırmasında saxlanılır. Latın hərfləri bir bayt tutur, ə, ş, ı kimi hərflər isə iki bayt. Ona görə len simvolların yox, baytların sayını qaytarır. Simvolları saymaq üçün unicode/utf8 paketindəki RuneCountInString funksiyası var. strings paketində isə hazır alətlər çoxdur: ToUpper, Contains, Replace, Split, TrimSpace və s.
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ə! ==========
Sabitlər və iota
Sabit const ilə elan olunur və proqram işləyərkən dəyişə bilməz. Sabitlər kompilyasiya zamanı hesablanır, ona görə onların qiyməti ədəd, sətir və ya bool kimi sadə qiymət olmalıdır. Mötərizədəki sabitlər qrupunda iota 0-dan başlayan sayğacdır: hər növbəti sətirdə 1 artır. Bu, ölçülər, həftənin günləri və ya statuslar kimi siyahılar üçün əlverişlidir.
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
Əsas fikirlər
var x int = 5uzun formadır,x := 5isə funksiyanın içində qısa elandır;=yalnız mövcud dəyişənə qiymət verir.- Qiymətsiz elan olunan dəyişən sıfır qiymət alır:
0,"",falsevə yanil. - Go tipləri avtomatik çevirmir:
float64(a),int(x)yaz; tam ədədlərin bölünməsi kəsr hissəni atır. strconv.Itoavəstrconv.Atoiədədlə sətir arasında çevirir;lensətrin baytlarını,utf8.RuneCountInStringsimvollarını sayır.constdəyişməz qiymətdir;iotasabitlər qrupunda 0-dan başlayan sayğacdır.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.
var score int sətrindən sonra score-un qiyməti nədir?