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"
)

Это воркер, который мы будем запускать в нескольких параллельных инстансах. Эти воркеры будут получать задания через канал jobs и отсылать результаты в results. Мы будем ожидать одну секунду для каждого задания для имитации тяжелого запроса.

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 заданий (jobs) и затем закрываем канал, сообщая о том что все задания отправлены.

    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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *