Go в примерах
Go в примерахGo — это язык программирования с открытым исходным кодом, предназначенный для создания простого, быстрого и надежного программного обеспечения.
Go в примерах Go by Example — это практическое введение в Go с использованием примеров реальных программ. Проверьте первый пример или просмотрите полный список ниже.
- Hello World
- Типы данных (Values)
- Переменные (Variables)
- Константы (Constants)
- Цикл For
- If/Else
- Switch
- Массивы (Arrays)
- Срезы (Slices)
- Карты (Maps)
- Ряд (Range)
- Функции (Functions)
- Функции с множественным возвратом (Multiple Return Values)
- Функции с переменным числом аргументов (Variadic Functions)
- Замыкания (Closures)
- Рекурсия (Recursion)
- Указатели (Pointers)
- Структуры (Structs)
- Методы (Methods)
- Интерфейсы (Interfaces)
- Ошибки (Errors)
- Горутины (Goroutines)
- Каналы (Channels)
- Буферизированный канал (Channel Buffering)
- Синхронизация канала (Channel Synchronization)
- Направления канала (Channel Directions)
- Select
- Тайм-ауты (Timeouts)
Неблокируемые операции в каналах (Non-Blocking Channel Operations)- Закрытие каналов (Closing Channels)
- Перебор значений из каналов (Range over Channels)
- Таймеры (Timers)
- Тикеры (повторения) (Tickers)
- Пулы воркеров (Worker Pools)
- WaitGroups
- Ограничение скорости (Rate Limiting)
- Атомарные счетчики (Atomic Counters)
- Мьютексы (Mutexes)
- Управление состоянием горутин (Stateful Goroutines)
- Сортировка (Sorting)
- Сортировка через функции (Sorting by Functions)
- Panic
- Defer
- Функции коллекции (Collection Functions)
- Строковые функции (String Functions)
- Форматирование строк (String Formatting)
- Регулярные выражения (Regular Expressions)
- JSON
- XML
- Время (Time)
- Epoch
- Форматирование времени (Time Formatting / Parsing)
- Случайные числа (Random Numbers)
- Парсинг чисел (Number Parsing)
- Парсинг URL (URL Parsing)
- Хеш SHA1 (SHA1 Hashes)
- Кодирование Base64 (Base64 Encoding)
- Чтение файлов (Reading Files)
- Запись файлов (Writing Files)
- Строковые фильтры (Line Filters)
- Пути к файлам (File Paths)
- Директории (Directories)
- Временные файлы и директории (Temporary Files and Directories)
- Тестирование (Testing)
- Аргументы командной строки (Command-Line Arguments)
- Флаги командной строки (Command-Line Flags)
- Подкоманды командной строки (Command-Line Subcommands)
- Переменные среды (Environment Variables)
- HTTP клиенты (HTTP Clients)
- HTTP серверы (HTTP Servers)
- Порождающие процессы (Spawning Processes)
- Исполняющие процессы (Exec’ing Processes)
- Сигналы (Signals)
- Выход (Exit)
Go в примерах: Пулы воркеров (Worker Pools)
Go в примерах: Пулы воркеров (Worker Pools)В этом примере мы рассмотрим, как реализовать пул воркеров с использованием каналов и
горутин. | |
package main | |
import (
"fmt"
"time"
)
| |
Это воркер, который мы будем запускать в нескольких
параллельных инстансах. Эти воркеры будут получать
задания через канал | func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
fmt.Println("worker", id, "started job", j)
time.Sleep(time.Second)
fmt.Println("worker", id, "finished job", j)
results <- j * 2
}
}
|
func main() {
| |
Чтобы использовать наш воркер пул, нам нужно
отправить им задание и получить результаты выполнения. | jobs := make(chan int, 100)
results := make(chan int, 100)
|
Стартуем 3 воркера, первоначально заблокированных, т.к. еще нет заданий. | for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
|
Посылаем 5 | for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs)
|
Наконец мы собираем все результаты. Это также гарантирует, что горутины закончились. Альтернативный способ ожидания нескольких процедур заключается в использовании WaitGroup. | for a := 1; a <= 5; a++ {
<-results
}
}
|
Наша программа показывает 5 заданий, выполняемых
различными воркерами. | $ time go run worker-pools.go worker 1 started job 1 worker 2 started job 2 worker 3 started job 3 worker 1 finished job 1 worker 1 started job 4 worker 2 finished job 2 worker 2 started job 5 worker 3 finished job 3 worker 1 finished job 4 worker 2 finished job 5 |
real 0m2.358s |
Следующий пример: WaitGroups.
Перейти к примеру
Перейти к примеру Го — это
язык программирования с открытым исходным кодом, предназначенный для
создание простого, быстрого и надежного программного обеспечения.
Пожалуйста, прочитайте официальную
документация
узнать немного о коде Go, пакетах инструментов,
и модули.
Пример — практическое введение to Go с использованием аннотированных примеров программ. Проверить первый пример или просмотрите полный список ниже.
- Привет, мир
- Значения
- Переменные
- Константы
- Для
- Если/иначе
- Переключатель
- Массивы
- Срезы
- Карты
- Диапазон
- Функции
- Несколько возвращаемых значений
- Переменные функции
- Затворы
- Рекурсия
- Указатели
- Струны и руны
- Конструкции
- Методы
- Интерфейсы
- Встраивание конструкции
- Дженерики
- Ошибки
- Горутины
- каналов
Буферизация канала- Синхронизация каналов
- Направления каналов
- Выберите
- Тайм-ауты
- Неблокирующие операции с каналами
- Закрытие каналов
- Диапазон по каналам
- Таймеры
- Тикеры
- Рабочие пулы
- Группы ожидания
- Ограничение скорости
- Атомные счетчики
- Мьютексы
- Горутины с отслеживанием состояния
- Сортировка
- Сортировка по функциям
- Паника
- Отложить
- Восстановление
- Строковые функции
- Форматирование строки
- Текстовые шаблоны
- Регулярные выражения
- JSON
- XML
- Время
- Эпоха
- Форматирование времени/анализ
- Случайные числа
- Парсинг номера
- Анализ URL
- SHA256 Хэши
- Кодировка Base64
- Чтение файлов
- Запись файлов
- Сетевые фильтры
- Пути к файлам
- Каталоги
- Временные файлы и каталоги
- Встроить директиву
- Тестирование и сравнительный анализ
- Аргументы командной строки
- Флаги командной строки
- Подкоманды командной строки
- Переменные среды
- HTTP-клиент
- HTTP-сервер
- Контекст
- Процессы нереста
- Выполнение процессов
- Сигналы
- Выход
Перейти к примеру: Интерфейсы
Перейти к примеру: Интерфейсы Интерфейсы названы наборами методов
подписи. | |
пакет основной | |
импорт (
"ФМТ"
"математика"
)
| |
Вот базовый интерфейс для геометрических фигур. |
тип интерфейса геометрии {
площадь() с плавающей запятой64
перим() float64
}
|
В нашем примере мы реализуем этот интерфейс на |
введите прямоугольную структуру {
ширина, высота float64
}
введите структуру круга {
радиус float64
}
|
Чтобы реализовать интерфейс в Go, нам просто нужно
реализовать все методы в интерфейсе. |
функция (прямая) область() float64 {
вернуть r.width * r.height
}
func (r rect) perim() float64 {
вернуть 2*r.ширина + 2*r.высота
}
|
Реализация для |
func (c круг) area() float64 {
вернуть math.Pi * c.radius * c.radius
}
func (c круг) perim() float64 {
вернуть 2 * math.Pi * c.radius
}
|
Если переменная имеет тип интерфейса, то мы можем вызвать
методы, находящиеся в именованном интерфейсе. Вот
общая функция измерения | функция измерения (g геометрия) {
fmt.Println(g)
fmt. |


Для этого мы делаем 2 канала.
Программа занимает всего около
2 секунд, несмотря на выполнение около 5 секунд общей
работы, потому что одновременно работают 3 воркера.
Мы тут
реализация 