Go (или Golang) от Google завоевал сердца разработчиков своей простотой, мощной стандартной библиотекой и первоклассной поддержкой concurrency (параллелизма). Это руководство проведет вас от самых основ до создания реального сетевого приложения, раскрывая идиоматические паттерны языка на практике.
Начнем с установки и классической программы. После установки Go с официального сайта создайте файл `main.go`:
```
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
```
Запустите его командой `go run main.go`. Первое, что бросается в глаза — обязательное определение пакета `main` и функции `main` как точки входа. Go — компилируемый язык, и команда `go build` создаст бинарный файл.
Основа языка — типы, переменные и функции. Go статически типизирован, но поддерживает краткое объявление переменных с помощью `:=`. Функции могут возвращать несколько значений, что часто используется для возврата результата и ошибки.
```
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, fmt.Errorf("cannot divide by zero")
}
return a / b, nil
}
result, err := divide(10, 2)
if err != nil {
log.Fatal(err)
}
fmt.Println(result) // 5
```
Структуры (structs) и методы — это способ организации данных и поведения. В Go нет классов, но методы можно определять для типов.
```
type User struct {
ID int
Name string
Email string
}
// Метод для типа User
func (u User) Greet() string {
return fmt.Sprintf("Hello, %s!", u.Name)
}
user := User{ID: 1, Name: "Alice"}
fmt.Println(user.Greet())
```
Теперь перейдем к одной из самых сильных сторон Go — конкурентности. Примитив `goroutine` — это легковесный поток, управляемый рантаймом Go. Для коммуникации между горутинами используются `channels` (каналы).
```
package main
import (
"fmt"
"time"
)
func worker(id int, jobs
Как: полное руководство по Go с примерами кода. От "Hello, World!" до конкурентного сервера
Исчерпывающее руководство по языку Go: от основ синтаксиса, структур и функций до практической реализации конкурентности с goroutines и channels и создания высокопроизводительного HTTP-сервера с пулом воркеров.
303
3
Комментарии (6)