O’zgaruvchi — dasturlashning eng bazaviy tushunchasi. Go’da o’zgaruvchi statik tipizatsiyalangan — turi kompilyatsiya vaqtida qat’iy belgilanadi, ammo buni yozishning ikki qulay usuli bor.
var / := —
var nom tur = qiymat— to’liq e’lon.nom := qiymat— qisqa e’lon, tur qiymatdan avtomatik xulosa qilinadi (type inference). Ikkinchisi faqat funksiya ichida ishlaydi.
To’liq e’lon — var
var kalit so’zi bilan o’zgaruvchi turi aniq ko’rsatiladi:
package main
import "fmt"
func main() {
var ism string = "Master Sherkulov"
var yosh int = 30
fmt.Println(ism, yosh)
}
Master Sherkulov 30
var ism string — ism nomli, string turidagi o’zgaruvchini e’lon qildi. Bu shakl, ayniqsa, qiymat keyinroq beriladigan yoki tur aniq ko’rsatilishi kerak bo’lgan holatlarda ishlatiladi.
Qisqa e’lon — :=
Funksiya ichida := operatori tur yozishni butunlay tushirib qoldiradi — Go turini qiymatdan o’zi xulosa qiladi:
package main
import "fmt"
func main() {
ism := "Farrux"
yosh := 26
narx := 15000.50
fmt.Println(ism, yosh, narx)
}
Farrux 26 15000.5
ism := "Farrux" — var ism string = "Farrux" bilan bir xil natija beradi, faqat ancha ixcham. Diqqat: := faqat funksiya ichida ishlaydi, paket darajasidagi o’zgaruvchilar albatta var bilan e’lon qilinadi.
Zero value — standart boshlang’ich qiymat
Go’ning muhim xususiyati: qiymat berilmasdan e’lon qilingan o’zgaruvchi hech qachon “aniqlanmagan” holatda bo’lmaydi — u turiga mos standart qiymat (zero value) bilan boshlanadi:
package main
import "fmt"
func main() {
var son int
var kasr float64
var matn string
var mantiqiy bool
fmt.Println(son, kasr, matn, mantiqiy)
fmt.Printf("%q\n", matn)
}
0 0 false
""
int uchun zero value — 0, float64 uchun — 0, string uchun — bo’sh satr ("", %q uni tirnoq bilan ko’rsatdi), bool uchun — false. Bu, masalan, C’dagi “boshlanmagan xotira — axlat qiymat” muammosining oldini butunlay oladi.
Bir nechta o’zgaruvchini birgalikda e’lon qilish
Bir necha o’zgaruvchini bitta qatorda yoki var blokida guruhlab e’lon qilish mumkin:
package main
import "fmt"
func main() {
a, b, c := 5, 10, 15
fmt.Println(a + b + c)
var (
shahar = "Toshkent"
aholi = 3000000
)
fmt.Println(shahar, aholi)
}
30
Toshkent 3000000
a, b, c := 5, 10, 15 — uchta o’zgaruvchini bir qatorda e’lon qildi. var (...) bloki esa bir nechta paket yoki funksiya darajasidagi o’zgaruvchini tartibli, qavs ichida guruhlashning odatiy usuli.