Перейти до основного вмісту
Модуль 1 · Урок 4 із 54/50 у курсі~8 min
Модульні уроки (4/5)

Оператори

Go має класичні оператори, яких ви очікували, з кількома сюрпризами: арифметичний, порівняльний, логічний, порозрядний. Немає тернарного оператора (a ? b : c), без перевантаження, без неявних перетворень між типами. Простота – це особливість.

Арифметика

Go
a, b := 10, 3
fmt.Println(a + b)  // 13
fmt.Println(a - b)  // 7
fmt.Println(a * b)  // 30
fmt.Println(a / b)  // 3   ← divisione INTERA tra interi
fmt.Println(a % b)  // 1   ← resto (modulo)

Інкремент і декремент – це ОПИСКИ, а не вирази

x++ та x-- не створюють значення: це "дії" і нічого більше. Ні y := x++ як у C.

Go
x := 5
x++          // ok: incrementa x
// y := x++  // ERRORE di compilazione
fmt.Println(x) // 6

Порівняння

== != < <= > >= повернути bool. Вони застосовуються до чисел і рядків; для structs УСІ поля мають бути порівнянними (без фрагментів/карт усередині).

Go
"abc" == "abc"  // true
"abc" < "abd"   // true (ordine lessicografico)
3 != 4           // true

Логічний з коротким замиканням

&&, ||, !. Вони замикаються зліва направо: якщо перший операнд достатньо для визначення результату, другий не парний оцінено.

Go
adult := age >= 18
seniorAdult := age >= 18 && age < 65

Побітово

& І, | АБО, ^ XOR, << зсув вліво, >> зсув вправо, &^ І НІ (трохи ясно). Вони корисні для прапорів, бінарного аналізу та оптимізації:

Go
flags := uint8(0b0000_0011)
flags |= 0b0000_0100   // imposta un bit:    0000_0111
flags &^= 0b0000_0010  // cancella un bit:   0000_0101
hasFlag := flags & 0b0000_0100 != 0  // true

Немає неявних перетворень

1 + 1.5 в Go компілюється, оскільки обидва є нетипізованими літералами. Але var i int = 1; i + 1.5 робить НІ: вам потрібен float64(i) + 1.5.

Go
i := 1
f := 1.5
// i + f          // ERRORE
float64(i) + f    // 2.5

Ваша черга

вправи#go.m1.l4.e1
Спроби: 0Завантаження…

Обчисліть в остачі залишок від ділення 17 на 5 і надрукуйте його. Очікується: 2.

Завантаження редактора…
Показати підказку

Оператор модуля є `%`.

Рішення доступне після 3 спроб

вправи#go.m1.l4.e2
Спроби: 0Завантаження…

Друкуйте true, якщо вік становить від 18 до 65 включно, інакше — false.

Завантаження редактора…
Показати підказку

Поєднайте два порівняння за допомогою "&&".

Рішення доступне після 3 спроб

Quiz#go.m1.l4.e3
Готовий

Що друкує цей код?

Go
a, b := 7, 2
fmt.Println(a/b, a%b)
Варіанти відповідей

Підведення підсумків

  • Класична арифметика; / між int є цілочисельним діленням (обрізається).
  • ++ та -- є операторами, а не виразами: ні y := x++.
  • Порівняння та логічні оператори створюють bool; &&/|| коротке замикання.
  • Побітовий & | ^ << >> &^ для прапорів і двійкового аналізу.
  • Немає неявних перетворень між різними типами: використовуйте type(x).