Operatorlar — qiymatlar ustida amal bajaradigan maxsus belgilar. Go’da ularning aksariyati boshqa C-oilasidagi tillarga o’xshaydi, lekin bir nechta muhim farq va o’ziga xos bitli operator bor.
Operator — bir yoki bir necha operand ustida ma’lum amalni bajaradigan belgi. Go’da operatorlar ham, boshqa amallar kabi, qat’iy tur mosligini talab qiladi.
Arifmetik operatorlar
Asosiy amallar tanish ko’rinishda, lekin Go’da Python yoki Ruby’dagi kabi daraja operatori (masalan 2**10) umuman yo’q — buning uchun math.Pow funksiyasi ishlatiladi:
package main
import "fmt"
func main() {
a := 7
b := 2
fmt.Println(a+b, a-b, a*b)
fmt.Println(a/b, a%b)
fmt.Println(7.0 / 2)
}
9 5 14
3 1
3.5
a/b (7/2) — ikkala operand ham int bo’lgani uchun natija butunlashtiriladi (3), qoldiq % orqali (1) olinadi. 7.0 / 2 esa kamida bitta operand kasr bo’lgani uchun aniq natija (3.5) beradi — bu qoidani ma’lumot turlari darsida ham ko’rgan edik.
Solishtirish va mantiqiy operatorlar
Solishtirish (==, !=, <, >, <=, >=) natijada bool qaytaradi, mantiqiy operatorlar esa &&, ||, ! belgilari bilan yoziladi (Python’dagi and/or/not so’zlari emas):
package main
import "fmt"
func main() {
yosh := 26
faol := true
fmt.Println(yosh > 18 && faol)
fmt.Println(yosh > 30 || faol)
fmt.Println(!faol)
}
true
true
false
&& — ikkala shart ham rost bo’lsagina rost, || — kamida bittasi rost bo’lsa yetarli, ! — qiymatni teskarisiga o’giradi.
++ va – — statement, ifoda emas
Go’da ++/-- ko’p tillardan farqli, mustaqil buyruq (statement) — ularni ifoda ichida (masalan, x := i++) ishlatib bo’lmaydi:
package main
import "fmt"
func main() {
son := 5
son++
fmt.Println(son)
son--
son--
fmt.Println(son)
}
6
4
son++ faqat mustaqil qator sifatida yoziladi, oldingi := son++ kabi yozuv kompilyatsiya xatosi beradi. Bu C++/Java dasturchilari uchun eng ko’p uchraydigan moslashish qiyinchiliklaridan biri.
Bitli operatorlar
Go raqamlar ustida bit darajasida ishlaydigan operatorlarni ham taqdim etadi — bulardan &^ (AND NOT) boshqa ko’p tillarda uchramaydigan, Go’ga xos operator:
| Operator | Ma’nosi |
|---|---|
& |
bitli VA |
\| |
bitli YOKI |
^ |
bitli XOR |
&^ |
AND NOT (bit tozalash) |
<< |
chapga siljitish |
>> |
o’ngga siljitish |
package main
import "fmt"
func main() {
a := 12 // 1100
b := 10 // 1010
fmt.Println(a & b)
fmt.Println(a | b)
fmt.Println(a ^ b)
fmt.Println(a &^ b)
fmt.Println(a << 2)
}
8
14
6
4
48
a &^ b — adagi bitlardan bda o’rnatilganlarini “tozalaydi” (o’chiradi): 1100 &^ 1010 = 0100 (4). Bu operator, masalan, bayroqlar (flags) to’plamidan muayyan bayroqni o’chirishda qulay — boshqa tillarda buning uchun odatda a & ~b yozish kerak bo’ladi.