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() { | |
Чтобы использовать наш воркер пул, нам нужно отправить им задание и получить результаты выполнения. Для этого мы делаем 2 канала. | 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 заданий, выполняемых различными воркерами. Программа занимает всего около 2 секунд, несмотря на выполнение около 5 секунд общей работы, потому что одновременно работают 3 воркера. | $ 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. |