img

Краткий обзор Go: ключевые особенности языка - часть 1

backendGo Lang стремительно развивается в области backend-разработки. Все больше разработчиков пишут серверный код для облачных сред на Go и используют его в современных микросервисных архитектурах.

icon strelka icons icons

узнай больше на курсе

Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Подробнее о курсе
Java-разработчик с нуля
Освойте backend-разработку и программирование на Java, фреймворки Spring и Maven, работу с базами данных и API
Подробнее о курсе
C# разработчик с нуля
На курсе ты освоишь основы программирования на C#, включая синтаксис, объектно-ориентированное программирование и асинхронное программирование.
Подробнее о курсе

В Go всего 25 ключевых слов (keywords, если что)!

Основные ключевые слова

var, const, type, struct - базовые.

const greeting = "Hello" var count int = 0 a := 10 // статическая типизация, тип определяется как int := имеет особое значение — сокращенная запись для объявления и определения

Нет необходимости использовать var для инициализации переменной.

В Go нет ключевых слов вроде int, int64, bool, boolean и т.д. Они существуют как встроенные типы, но не как основные ключевые слова языка.

Объединение import и переменных

import ( "fmt" "os" "net" ) // аналогично можно объединять объявления var или const var ( a , b int = 3 , 7 name string = "Donald Trump" )

Управляющие конструкции

Нет while, нет do..while! Есть только for / range и goto. Спокойно - да, goto здесь есть. Спасибо Google за это. Можно любить или ненавидеть - мы не будем занимать сторону :)

nums := [10]int{10, 20, 30,40,50,60,70,80,90,108} // объявление и инициализация массива fmt.Println("Iterating over nums with range:") for i, num := range nums { // ключевое слово range fmt.Printf("Index %d: Value %d\n", i, num) // похоже на C/C++? if i == 3 { continue } if i == 5 { break // выход из цикла при i == 5 } }

select, switch, fallthrough используются для управления логикой ветвления.

count := 2 switch count { case 0, 1: fmt.Println("Count is 0 or 1") // break по умолчанию в Go, в отличие от C/C++/Java case 2: fallthrough // переход к следующему case case 3: fmt.Println("Count is 2 or 3") // выполнится default: fmt.Println("Count is something else") }

В C / C++ / Java fallthrough - поведение по умолчанию, и требуется явно писать break.

В Go наоборот - break по умолчанию, а для продолжения используется fallthrough.

chan и make

В Go нет потоков уровня ОС. Вместо этого используются горутины - легковесные аналоги потоков.

chan (канал) - это своего рода канал передачи данных между горутинами.

ch := make(chan int) // отправка значения в канал (стрелка справа) ch <- 42 // получение значения (стрелка слева) value := <-ch // получение с проверкой value, ok := <-ch // немного странно? Go поддерживает множественные значения слева if !ok { fmt.Println("Channel is closed") } // закрытие канала close(ch)

Горутины и каналы в действии

ch1 := make(chan string) ch2 := make(chan string) go func() { time.Sleep(1 * time.Second) ch1 <- "Message from channel 1" }() go func() { time.Sleep(2 * time.Second) ch2 <- "Message from channel 2" }() // select ожидает первый готовый канал select { // аналог switch, но для каналов case msg1 := <-ch1: fmt.Println(msg1) case msg2 := <-ch2: fmt.Println(msg2) case <-time.After(3 * time.Second): fmt.Println("Timeout!") }

backend

// разные способы инициализации - все с индекса 0 fruits := [3]string{"apple", "banana", "orange"} colors := [...]string{"red", "green", "blue"} // размер определяется автоматически mixed := [5]int{0: 10, 2: 30, 4: 50} // разреженная инициализация [10,0,30,0,50]

Конструкторы с префиксом New

func NewUser(name string) *User { return &User{ ID: generateID(), // вспомогательная функция генерации ID Name: name, Email: "", // пустой email CreatedAt: time.Now(), IsActive: true, } } func NewUserWithEmail(name, email string) *User { return &User{ ID: generateID(), Name: name, Email: email, CreatedAt: time.Now(), IsActive: true, } } func NewUserFromID(id int) *User { // в реальном приложении здесь был бы запрос к базе данных userData := fetchUserFromDatabase(id) if userData == nil { return nil // пользователь не найден } return &User{ ID: id, Name: userData.Name, Email: userData.Email, CreatedAt: userData.CreatedAt, IsActive: userData.IsActive, } }

Указатели в Go

Да, в Go есть указатели, но в более безопасной форме по сравнению с C/C++.

Указатели не поддерживают арифметику.

// Предполагается, что структура User уже существует type User struct { Name string Age int } // Вариант 1 var UserObject User = User{Name: "John", Age: 30} var pointerVar2 *User = &UserObject // Вариант 2 UserObject := User{Name: "John", Age: 30} pointerVar2 := &UserObject // Вариант 3 pointerVar2 := &User{Name: "John", Age: 30} // Вариант 4 pointerVar2 := new(User) *pointerVar2 = User{Name: "John", Age: 30}

Если хотите глубже разобраться в языке и практике его применения в backend-разработке, можно изучить курс по Go программированию, где подробно разбираются реальные кейсы и архитектура сервисов.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
icon strelka icons icons

узнай больше на курсе

Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Подробнее о курсе
Java-разработчик с нуля
Освойте backend-разработку и программирование на Java, фреймворки Spring и Maven, работу с базами данных и API
Подробнее о курсе
C# разработчик с нуля
На курсе ты освоишь основы программирования на C#, включая синтаксис, объектно-ориентированное программирование и асинхронное программирование.
Подробнее о курсе
Фронтенд-разработчик с нуля
Погрузитесь в мир веб-разработки, освоив основные инструменты работы: HTML, CSS, JavaScript
Подробнее о курсе
Разработка приложений на Flutter и Dart
Научись создавать кроссплатформенные приложения на Flutter, освой язык Dart
Подробнее о курсе
Автоматизированное тестирование на Python
Изучите автоматизацию тестирования на Python чтобы стать востребованным специалистом
Подробнее о курсе
Еще по теме:
img
Разбираем, какую AI-модель выбрать под задачу: ChatGPT, Claude, Gemini или NotebookLM - их сильные стороны и ограничения
img
Почему диалог с ИИ снижает продуктивность и как перейти к декларативному управлению задачами вместо бесконечных чат-сессий
img
Простое объяснение 20 базовых концепций искусственного интеллекта: от нейросетей до агентов и RAG без сложных терминов.
img
Разбираем причины выгорания senior Android разработчиков: скрытая нагрузка, архитектурные решения и рост требований в экосистеме
img
Разбираем goroutine, mutex и waitgroup в Go на практическом примере с подсчетом частоты слов и параллельной обработкой данных.
ВЕСЕННИЕ СКИДКИ
30%
40%
50%
До конца акции: 30 дней 24 : 59 : 59