1 Обзор операторов в Golang

В языке Go операторы используются для выполнения операций с программным кодом, включая арифметические операции, сравнения, логические операции и многое другое. Различные операторы соответствуют различным функциональным возможностям и сценариям использования. Понимание и усвоение этих операторов является основой эффективного программирования.

2 Арифметические операторы

В языке Go предусмотрен набор арифметических операторов:

  • Сложение (+): Операция сложения
  • Вычитание (-): Операция вычитания
  • Умножение (*): Операция умножения
  • Деление (/): Операция деления
  • Остаток от деления (%): Операция взятия остатка от деления

Примеры:

package main

import "fmt"

func main() {
    // Операция сложения
    sum := 10 + 5
    fmt.Println("10 + 5 =", sum) // Выводит 15

    // Операция вычитания
    diff := 10 - 5
    fmt.Println("10 - 5 =", diff) // Выводит 5

    // Операция умножения
    prod := 10 * 5
    fmt.Println("10 * 5 =", prod) // Выводит 50

    // Операция деления
    quot := 10 / 5
    fmt.Println("10 / 5 =", quot) // Выводит 2

    // Операция взятия остатка от деления
    rem := 10 % 5
    fmt.Println("10 % 5 =", rem) // Выводит 0
}

3 Логические операторы

Логические операторы в языке Go используются для объединения нескольких условий (обычно используются для булевых значений). В них есть три типа: AND (&&), OR (||) и NOT (!).

3.1 AND (&&)

Когда все условия истинны, результат операции "AND" также является истиной.

Примеры:

package main

import "fmt"

func main() {
    fmt.Println(true && true)   // Выводит true
    fmt.Println(true && false)  // Выводит false
    fmt.Println(false && false) // Выводит false
    // Результат истинен только, когда оба условия верны
}

3.2 OR (||)

Если хотя бы одно условие верно, результат операции "OR" также является истиной.

Примеры:

package main

import "fmt"

func main() {
    fmt.Println(true || true)   // Выводит true
    fmt.Println(true || false)  // Выводит true
    fmt.Println(false || false) // Выводит false
    // Результат истинен, если хотя бы одно условие верно
}

3.3 NOT (!)

Используется для инвертирования булевого значения условия.

Примеры:

package main

import "fmt"

func main() {
    fmt.Println(!true)  // Выводит false
    fmt.Println(!false) // Выводит true
    // Инвертирует булево значение
}

4 Операторы сравнения

Операторы сравнения в языке Go используются для сравнения двух переменных или значений:

  • Равно (==)
  • Не равно (!=)
  • Больше чем (>)
  • Меньше чем (<)
  • Больше или равно (>=)
  • Меньше или равно (<=)

Результатом операций сравнения является булево значение: true или false.

5 Побитовые операторы

В Go побитовые операторы позволяют нам непосредственно манипулировать двоичными разрядами данных:

  • Побитовое И (&)
  • Побитовое ИЛИ (|)
  • Побитовое исключающее ИЛИ (^)
  • Побитовый сдвиг влево (<<)
  • Побитовый сдвиг вправо (>>)

Побитовые операторы в основном используются в низкоуровневом программировании, таком как прямые операции с аппаратурой, шифрование и другие сценарии.

6 Операторы присваивания

Операторы присваивания используются для присвоения значений переменным. В языке Go существует несколько форм операторов присваивания:

  • Простое присваивание (=)
  • Присваивание с прибавлением (+=)
  • Присваивание с вычитанием (-=)
  • Присваивание с умножением (*=)
  • Присваивание с делением (/=)
  • Присваивание с остатком (%=)

Эти операторы делают код более лаконичным. Например, x += 1 эквивалентно x = x + 1.

7 Специальные операторы

7.1 Операторы Инкремента (++) и Декремента (--)

Оператор инкремента (++) и оператор декремента (--) используются для увеличения и уменьшения значения переменной на 1 соответственно. Они являются единственными операторами в языке Go, которые могут действовать непосредственно на саму переменную (а не на выражение).

package main

import "fmt"

func main() {
    x := 1
    x++
    fmt.Println("x++ =", x) // Выводит 2

    y := 10
    y--
    fmt.Println("y-- =", y) // Выводит 9
}

Обратите внимание, что в языке Go x++ или x-- не могут быть частью выражения. Например, z := x++ не разрешено.

7.2 Преобразование Типов

Язык Go является статически типизированным, что означает, что после объявления переменной ее тип не может быть изменен. Поэтому иногда необходимо преобразовать переменную одного типа в другой тип. В Go нет автоматического преобразования типов; требуется явное преобразование типов.

Пример:

package main

import (
	"fmt"
)

func main() {
	var i int = 42
	fmt.Println(float64(i)) // Преобразование int в float64

	var f float64 = 3.14
	fmt.Println(int(f)) // Преобразование float64 в int, дробная часть будет отброшена
}

При выполнении преобразования типов важно обеспечить безопасность данных в процессе преобразования, например, потенциальную потерю точности при преобразовании числа с плавающей точкой в целое число.