Go入门:历史、特性、应用
Что это и зачем?
Представь, что ты строишь дом из кубиков Lego. Есть кубики, которые просто ставятся друг на друга — это как простой язык программирования. А есть кубики, которые ещё и крепко сцепляются, чтобы дом не развалился, даже если на него упадет мяч. Go (или Golang) — это такой "супер-крепкий Lego" для программистов. Его придумали в компании Google в 2009 году, потому что программистам надоело ждать, пока их программы долго запускаются или ломаются при большой нагрузке.
Зачем тебе знать Go? Представь, что ты пишешь программу для онлайн-игры, где одновременно играют миллион человек. На Python или JavaScript такая программа может начать "тормозить" или упасть. Go же создан, чтобы работать быстро и надёжно, как швейцарские часы. Его используют в больших проектах: Docker (программа для запуска приложений), Kubernetes (система для управления программами), а также в серверах Telegram и YouTube. Если ты хочешь стать крутым разработчиком, который умеет делать быстрые и мощные программы — Go твой выбор.
Синтаксис и примеры кода
Go выглядит строго, но логично. Давай разберём несколько примеров. Не пугайся — я объясню каждую строчку!
Пример 1: Привет, мир!
package main // 1. Говорим, что это главная программа
import "fmt" // 2. Берём библиотеку для вывода текста
func main() { // 3. Главная функция, с неё всё начинается
fmt.Println("Привет, мир!") // 4. Печатаем текст
}
Комментарии:
package main— каждая программа на Go начинается с указания "пакета".main— это как "главный вход" в программу.import "fmt"— мы подключаем готовый набор инструментов (библиотеку) для работы с текстом.fmt— это сокращение от "format".func main()— функция, которая запускается первой. Внутри неё пишем команды.fmt.Println(...)— команда "напечатай строку и перейди на новую строку". Всё, что в кавычках, появится на экране.
Пример 2: Переменные и математика
package main
import "fmt"
func main() {
// Объявляем переменные
var age int = 14 // age — целое число (int)
var name string = "Аня" // name — строка (string)
var height float64 = 1.65 // height — дробное число (float64)
// Считаем возраст через 5 лет
futureAge := age + 5 // := — короткая запись для новых переменных
// Выводим результат
fmt.Println("Привет,", name)
fmt.Println("Тебе сейчас", age, "лет")
fmt.Println("Через 5 лет тебе будет", futureAge)
fmt.Println("Твой рост:", height, "м")
}
Комментарии:
var age int = 14— создаём переменнуюageтипаint(целое число) и кладём туда 14.futureAge := age + 5— короткий способ создать переменную. Go сам догадается, чтоfutureAgeтоже целое число.fmt.Printlnумеет печатать сразу несколько штук через запятую.
Пример 3: Условия (if-else)
package main
import "fmt"
func main() {
var age int = 16
if age >= 18 { // Если age больше или равно 18
fmt.Println("Ты взрослый!")
} else if age >= 12 { // Иначе если age >= 12
fmt.Println("Ты подросток!")
} else { // Иначе (все остальные случаи)
fmt.Println("Ты ребёнок!")
}
}
Комментарии:
if— проверяет условие. Если оно истинно (правда), выполняется код внутри фигурных скобок{}.else if— ещё одна проверка, если первая не сработала.else— выполняется, если ни одно условие не подошло.- Обрати внимание: в Go нет круглых скобок вокруг условия (как в Python), но фигурные скобки обязательны!
Пример 4: Цикл (for)
package main
import "fmt"
func main() {
// Считаем от 1 до 5
for i := 1; i <= 5; i++ {
fmt.Println("Счёт:", i)
}
// Бесконечный цикл (остановится, когда i станет 10)
i := 0
for {
i++
if i == 10 {
break // выходим из цикла
}
}
fmt.Println("Цикл закончен, i =", i)
}
Комментарии:
for i := 1; i <= 5; i++— три части: начальное значение (i=1), условие (пока i <= 5), шаг (увеличить i на 1).i++— сокращение дляi = i + 1.break— команда "стоп, выходи из цикла".- В Go нет цикла
while, как в Python. Вместо него используютforс одним условием.
Пример 5: Функции
package main
import "fmt"
// Функция, которая складывает два числа
func add(a int, b int) int {
return a + b // возвращаем результат
}
func main() {
result := add(5, 3) // вызываем функцию
fmt.Println("5 + 3 =", result)
// Можно вызвать несколько раз
fmt.Println("10 + 20 =", add(10, 20))
}
Комментарии:
func add(a int, b int) int— объявляем функцию с именемadd. Она принимает два целых числа (a и b) и возвращает целое число (последнийint).return a + b— возвращаем сумму.- Функции помогают не писать один и тот же код много раз.
Сравнение с Python
Python — это как "разговорный язык": на нём легко и быстро писать, но он может быть медленным. Go — как "официальный документ": строгий, но быстрый и надёжный. Давай сравним:
| Идея | Python | Go |
|---|---|---|
| Привет, мир | print("Привет") |
fmt.Println("Привет") |
| Переменная | age = 14 |
var age int = 14 или age := 14 |
| Условие | if age >= 18: |
if age >= 18 { |
| Цикл | for i in range(5): |
for i := 0; i < 5; i++ { |
| Функция | def add(a, b): |
func add(a int, b int) int { |
Главные отличия:
- Типы: В Python ты пишешь
age = 14, и Python сам понимает, что это число. В Go нужно явно указывать тип (int,stringи т.д.). Это кажется сложным, но зато программа работает быстрее и реже ошибается. - Скобки: В Python условия и циклы заканчиваются двоеточием, а блоки кода выделяются отступами. В Go — фигурные скобки
{}. Отступы не важны (но их всё равно ставят для красоты). - Скорость: Go компилируется (превращается в машинный код) сразу, а Python интерпретируется (читается строка за строкой). Поэтому Go работает в 10-100 раз быстрее.
Типичные ошибки новичков
Даже опытные программисты иногда путаются в Go. Вот что чаще всего ловит новичков:
- Забыл указать тип или имя переменной. Например, написал
var = 5вместоvar x int = 5. Go скажет: "Ошибка! Я не знаю, что это за переменная". - Неиспользуемые переменные. Если ты объявил переменную, но нигде её не использовал, Go откажется запускать программу. Это сделано, чтобы код был чистым. Решение: либо используй переменную, либо удали её.
- Путаница с
=и:=.=— присвоить значение уже существующей переменной.:=— создать новую переменную. Если написатьage := 14дважды, будет ошибка. - Забыл фигурные скобки. В Go нельзя писать
if x > 5без{}. Даже если внутри одна команда, скобки обязательны. - Неправильный импорт. Если ты подключил
"fmt", но не используешь его — ошибка. Если используешьfmt.Println, но не импортировал — тоже ошибка. - Путаница с типами. Нельзя сложить
intиfloat64без преобразования. Например,var a int = 5; var b float64 = 2.5; fmt.Println(a + b)— ошибка. Н