Operatorlar
Dasturlashda operator — bu qiymatlar yoki o'zgaruvchilar ustida muayyan amallarni bajarish uchun ishlatiladigan maxsus belgi hisoblanadi.
Masalan, + belgisi ikki sonni qo'shish uchun ishlatiladigan operatordir:
sum := 5 + 3 // 8
Go dasturlash tilida operatorlar quyidagi asosiy toifalarga bo'linadi:
Arifmetik operatorlar qo'shish, ayirish, ko'paytirish, bo'lish kabi matematik amallarni bajarish uchun ishlatiladi.
| Operator | Tavsif | Misol |
|---|---|---|
+ | Qo'shish (Addition) | a + b |
- | Ayirish (Subtraction) | a - b |
* | Ko'paytirish (Multiplication) | a * b |
/ | Bo'lish (Division) | a / b |
% | Qoldiqli bo'lish (Modulo Division) | a % b |
package main
import "fmt"
func main() {
num1 := 6
num2 := 2
// + operatori
sum := num1 + num2
fmt.Printf("%d + %d = %d\n", num1, num2, sum)
// - operatori
difference := num1 - num2
fmt.Printf("%d - %d = %d\n", num1, num2, difference)
// * operatori
product := num1 * num2
fmt.Printf("%d * %d = %d\n", num1, num2, product)
}
Natija:
6 + 2 = 8
6 - 2 = 4
6 * 2 = 12
/)Go tilida butun sonlarni bo'lishda muhim xususiyat mavjud:
package main
import "fmt"
func main() {
num1 := 11
num2 := 4
quotient := num1 / num2
fmt.Printf("%d / %d = %d\n", num1, num2, quotient)
}
Natija:
11 / 4 = 2
Oddiy matematikada 11 / 4 = 2.75 bo'ladi. Biroq, Go tilida ikkala son ham int (butun son) bo'lgani uchun, bo'lish natijasi ham butun son qilib olinadi (kasr qismi shunchaki tashlab yuboriladi):

Aniq kasrli natija olish uchun kamida bitta son o'nlik kasr (float) ko'rinishida bo'lishi kerak:
package main
import "fmt"
func main() {
num1 := 11.0
num2 := 4.0
result := num1 / num2
fmt.Printf("%g / %g = %g\n", num1, num2, result)
}
Natija:
11 / 4 = 2.75
%)% (modulo) operatori bo'lish amalidan qolgan butun qoldiqni hisoblaydi:
package main
import "fmt"
func main() {
num1 := 11
num2 := 4
remainder := num1 % num2
fmt.Println("Qoldiq:", remainder)
}
Natija:
Qoldiq: 3
11 ni 4 ga bo'lsak, butun qismi 2 va qoldig'i 3 bo'ladi (11 = 4 * 2 + 3).

[!NOTE] Modulo (
%) operatori faqat butun sonlar (int) bilan ishlatiladi. Kasr sonlar bilan ishlatib bo'lmaydi.
++ va --)Go tilida o'zgaruvchi qiymatini 1 ga oshirish yoki 1 ga kamaytirish uchun qulay operatorlar mavjud:
++ — o'zgaruvchi qiymatini 1 ga oshiradi (inkrement).-- — o'zgaruvchi qiymatini 1 ga kamaytiradi (dekrement).package main
import "fmt"
func main() {
num := 5
num++
fmt.Println(num) // 6
num--
fmt.Println(num) // 5
}
[!WARNING] Go tilida
++va--operatorlari ifoda (expression) emas, balki alohida buyruq (statement) hisoblanadi. Shuning uchunresult = num++yoki++numkabi yozuvlarga ruxsat berilmaydi. Faqat postfix ko'rinishida (num++,num--) ishlatiladi.
O'zlashtirish operatori o'ng tomondagi qiymatni chap tomondagi o'zgaruvchiga yuklash uchun ishlatiladi:
var number = 34
Bu yerda = operatori 34 sonini number o'zgaruvchisiga o'zlashtiradi.
Go tilida arifmetik amallarni o'zlashtirish bilan birlashtiruvchi qisqa formalar mavjud:
| Operator | Misol | Aslida qanday ishlaydi |
|---|---|---|
+= | a += b | a = a + b |
-= | a -= b | a = a - b |
*= | a *= b | a = a * b |
/= | a /= b | a = a / b |
%= | a %= b | a = a % b |
Misol:
package main
import "fmt"
func main() {
num := 10
num += 5 // num = num + 5
fmt.Println(num) // 15
num -= 3 // num = num - 3
fmt.Println(num) // 12
num *= 2 // num = num * 2
fmt.Println(num) // 24
num /= 4 // num = num / 4
fmt.Println(num) // 6
}
Taqqoslash operatorlari ikki qiymatni o'zaro solishtirish uchun ishlatiladi va har doim mantiqiy natija — true yoki false qaytaradi.
| Operator | Tavsif | Misol | Natija |
|---|---|---|---|
== | Tengmi? (Equal to) | 5 == 5 | true |
!= | Teng emasmi? (Not equal) | 5 != 3 | true |
> | Kattami? (Greater than) | 7 > 3 | true |
< | Kichikmi? (Less than) | 4 < 2 | false |
>= | Katta yoki tengmi? | 6 >= 6 | true |
<= | Kichik yoki tengmi? | 5 <= 3 | false |
Misol:
package main
import "fmt"
func main() {
a := 5
b := 9
fmt.Println(a == b) // false
fmt.Println(a != b) // true
fmt.Println(a > b) // false
fmt.Println(a < b) // true
}
Mantiqiy operatorlar shartli ifodalarni birlashtirish yoki inkor qilish uchun ishlatiladi:
| Operator | Nomi | Tavsif | Misol |
|---|---|---|---|
&& | Mantiqiy VA (AND) | Ikkala shart ham true bo'lsagina true qaytaradi | (5 > 2) && (3 < 7) → true |
|| | Mantiqiy YOKI (OR) | Kamida bitta shart true bo'lsa true qaytaradi | (5 > 10) || (3 < 7) → true |
! | Mantiqiy INKOR (NOT) | Natijani teskarisiga o'zgartiradi (true → false) | !(5 == 5) → false |
Misol:
package main
import "fmt"
func main() {
a := 10
b := 20
fmt.Println((a > 5) && (b > 15)) // true
fmt.Println((a > 15) || (b > 15)) // true
fmt.Println(!(a == b)) // true
}
>>): Sonning ikkilik sanoq sistemasidagi bitlarini ko'rsatilgan miqdorcha o'ngga suradi.<<): Sonning ikkilik bitlarini ko'rsatilgan miqdorcha chapga suradi va bo'shagan joylarga 0 qo'shadi.package main
import "fmt"
func main() {
num := 4 // ikkilikda: 0000 0100
fmt.Println(num << 1) // 8 (0000 1000 - 2 ga ko'paytirish)
fmt.Println(num >> 1) // 2 (0000 0010 - 2 ga bo'lish)
}
& va *Go tilida ko'rsatkichlar (pointer) bilan ishlashda ikkita maxsus belgidan foydalaniladi:
& (Address of): O'zgaruvchining xotiradagi manzilini oladi.* (Dereference / Pointer declaration): Ko'rsatkich turini e'lon qilish yoki manzil ichidagi qiymatni o'qish uchun ishlatiladi.package main
import "fmt"
func main() {
num := 20
// &num xotira manzilini beradi
fmt.Println("Xotira manzili:", &num) // Masalan: 0xc000018098
var ptr *int = &num
fmt.Println("Ko'rsatkich orqali qiymat:", *ptr) // 20
}
Murakkab ifodalarda qaysi amal birinchi bajarilishi operatorlarning ustunligiga (precedence) bog'liq. Masalan:
result := 32 / 8 + 2 * 9 - 4
Bu yerda:
/ va * amallari bajariladi: 32 / 8 = 4 va 2 * 9 = 18.+ va - amallari: 4 + 18 - 4 = 18.Amallar ketma-ketligini aniq va xatosiz boshqarish uchun har doim qavslar () dan foydalanish tavsiya etiladi.