Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
https://github.com/sourcegraph/conc
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - sourcegraph/conc: Better structured concurrency for go
Better structured concurrency for go. Contribute to sourcegraph/conc development by creating an account on GitHub.
👍6
В чем разница между методами Time.Sub() и Time.Add() пакета time?
В пакете
1. Time.Sub():
- Используется для вычисления разницы между двумя временными значениями.
- Принимает другой объект типа
- Пример использования:
2. Time.Add():
- Используется для добавления определенного временного интервала (типа
- Принимает значение
- Пример использования:
Таким образом,
👉 @juniorGolang
В пакете
time языка Go методы Time.Sub() и Time.Add() служат для работы с временными значениями, но выполняют разные задачи:1. Time.Sub():
- Используется для вычисления разницы между двумя временными значениями.
- Принимает другой объект типа
Time и возвращает Duration, представляющую время, прошедшее между этими двумя временными значениями.- Пример использования:
t1 := time.Now()
t2 := t1.Add(2 * time.Hour)
duration := t2.Sub(t1) // возвращает 2 часа
2. Time.Add():
- Используется для добавления определенного временного интервала (типа
Duration`) к объекту типа `Time.- Принимает значение
Duration и возвращает новый объект Time, который представляет момент времени, полученный после добавления указанного интервала.- Пример использования:
t := time.Now()
newTime := t.Add(2 * time.Hour) // возвращает t плюс 2 часа
Таким образом,
Time.Sub() используется для нахождения разницы между временными метками, а Time.Add() — для добавления интервала времени к конкретной временной метке.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1
Глубокое погружение в массивы и срезы Go
Статья предлагает детальный обзор массивов и срезов в Go
Также обсуждаются темы управления памятью, копирования данных, и практические примеры кода, показывающие, как работать с этими структурами данных
🔜 Читать
👉 @juniorGolang | #cтатья
Статья предлагает детальный обзор массивов и срезов в Go
Также обсуждаются темы управления памятью, копирования данных, и практические примеры кода, показывающие, как работать с этими структурами данных
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥2
Подборка бесплатных ресурсов для изучения Go
— Набор интерактивных практических заданий, которые нужно выполнять прямо в браузере: https://tour.golang.org
— Руководство-шпаргалка по основным темам языка. На каждую тему есть полноценная программа, для каждой строчки которой подготовлено подробное пояснение: https://gobyexample.com
— Ресурс, по содержанию похожий на предыдущий. Здесь тоже для каждой из тем языка представлены практические примеры с объяснениями: https://gowebexamples.com
— Полноценная книга для изучения языка. Примеры из книги можно изменять прямо в бразуере и смотреть на изменения результата выполнения: https://www.programming-books.io/essential/go
👉 @juniorGolang | #ресурсы
— Набор интерактивных практических заданий, которые нужно выполнять прямо в браузере: https://tour.golang.org
— Руководство-шпаргалка по основным темам языка. На каждую тему есть полноценная программа, для каждой строчки которой подготовлено подробное пояснение: https://gobyexample.com
— Ресурс, по содержанию похожий на предыдущий. Здесь тоже для каждой из тем языка представлены практические примеры с объяснениями: https://gowebexamples.com
— Полноценная книга для изучения языка. Примеры из книги можно изменять прямо в бразуере и смотреть на изменения результата выполнения: https://www.programming-books.io/essential/go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Это библиотека на языке Go для выполнения тех задач, которые хорошо умеют делать shell-скрипты: чтение файлов, выполнение подпроцессов, подсчет строк, сопоставление строк и так далее.
Почему бы не сделать так, чтобы писать программы системного администрирования на Go было так же легко, как и в обычном shell? script призван сделать это именно таким образом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2👀1
Изучение Go в 2024 году: от новичка до сеньора
В статье автор собирает лучшие ресурсы, материалы и подходы, которые помогут ускорить процесс обучения и совершенствования в Go
🔜 Читать
👉 @juniorGolang | #cтатья
В статье автор собирает лучшие ресурсы, материалы и подходы, которые помогут ускорить процесс обучения и совершенствования в Go
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍4❤3
Konf
Простейший загрузчик конфигураций для Go, который читает/смотрит из файла, env, флага и облаков (AWS, Azure, GCP).
📌 Основные возможности:
⏩ konf.Unmarshal для чтения конфигурации в любой тип объекта.
⏩ konf.OnChange для регистрации колбэков при изменении конфигурации.
⏩ konf.Explain для понимания, откуда загружается конфигурация.
⏩ Различные провайдеры для загрузки конфигурации из облаков (AWS, Azure и GCP).
⏩ Zero dependencies в core модуле, который поддерживает загрузку конфигурации из переменных окружения, флагов и встроенной файловой системы.
🔜 https://github.com/nil-go/konf
👉 @juniorGolang | #ресурсы
Простейший загрузчик конфигураций для Go, который читает/смотрит из файла, env, флага и облаков (AWS, Azure, GCP).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍5🔥2🤔1
Gopherlings
Репозиторий с простыми и небольшими задачами по Go, которые необходимо исправить.
🔜 https://github.com/soypat/gopherlings
👉 @juniorGolang | #ресурсы
Репозиторий с простыми и небольшими задачами по Go, которые необходимо исправить.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - soypat/gopherlings: 📘️ Learn Go by fixing tiny incorrect programs
📘️ Learn Go by fixing tiny incorrect programs. Contribute to soypat/gopherlings development by creating an account on GitHub.
👍7
Создание кастомного балансировщика нагрузки на Go для gRPC с приоритизацией адресов
Это решение позволяет гибко управлять распределением клиентских запросов между серверами с разными уровнями доступности и обеспечивает подключение к оптимальному ЦОД с минимальными задержками.
👉 Читать
👉 @juniorGolang | #cтатья
Это решение позволяет гибко управлять распределением клиентских запросов между серверами с разными уровнями доступности и обеспечивает подключение к оптимальному ЦОД с минимальными задержками.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Как использовать пакет 🕒
Пакет
1️⃣ Создание контекста с тайм-аутом
Контекст с тайм-аутом автоматически отменяет операцию, если она не завершилась за указанное время
Пример:
Что здесь происходит:
🔹 context.WithTimeout создаёт контекст, который завершится через 1 секунду.
🔹 Функция doWork проверяет канал ctx.Done() для отмены.
Результат: работа прерывается через 1 секунду.
2️⃣ Контекст с дедлайном
Дедлайн задаёт фиксированное время завершения.
Это полезно для заданий, где нужно строгое время завершения
3️⃣ Встраивание значений в контекст
Контекст может передавать данные между частями программы. Используйте
Когда использовать:
🔹 Передача метаданных, например, ID пользователя, токенов аутентификации.
🔹 Не используйте контекст для передачи больших объёмов данных.
4️⃣ Прерывание нескольких горутин
Контекст позволяет координировать отмену между несколькими горутинами:
Что происходит:
🔹 Отмена контекста (cancel) сигнализирует всем горутинам остановиться через ctx.Done().
5️⃣ Советы:
🔹 Используйте context только для управления временем выполнения и метаданными. Не передавайте через контекст сложные данные.
🔹 Добавляйте тайм-ауты ко всем сетевым операциям. Это помогает избежать зависания при проблемах с соединением.
🔹 Обязательно вызывайте cancel() для освобождения ресурсов
👉 @juniorGolang | #заметки
context в Go? Пакет
context помогает управлять временем выполнения и отменой операций, особенно в веб-приложениях и микросервисах. Это необходимо для предотвращения зависаний и утечек ресурсовКонтекст с тайм-аутом автоматически отменяет операцию, если она не завершилась за указанное время
Пример:
package main
import (
"context"
"fmt"
"time"
)
func doWork(ctx context.Context) {
select {
case <-time.After(2 * time.Second):
fmt.Println("Work completed")
case <-ctx.Done():
fmt.Println("Work canceled:", ctx.Err())
}
}
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
defer cancel() // Освобождаем ресурсы
go doWork(ctx)
time.Sleep(2 * time.Second)
fmt.Println("Done")
}
Что здесь происходит:
Результат: работа прерывается через 1 секунду.
Дедлайн задаёт фиксированное время завершения.
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2*time.Second))
defer cancel()
Это полезно для заданий, где нужно строгое время завершения
Контекст может передавать данные между частями программы. Используйте
context.WithValue:func doWork(ctx context.Context) {
userID := ctx.Value("userID")
fmt.Println("User ID:", userID)
}
func main() {
ctx := context.WithValue(context.Background(), "userID", 42)
doWork(ctx)
}Когда использовать:
Контекст позволяет координировать отмену между несколькими горутинами:
func worker(ctx context.Context, id int) {
for {
select {
case <-ctx.Done():
fmt.Printf("Worker %d stopped\n", id)
return
default:
fmt.Printf("Worker %d working\n", id)
time.Sleep(500 * time.Millisecond)
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
for i := 1; i <= 3; i++ {
go worker(ctx, i)
}
time.Sleep(2 * time.Second)
cancel() // Отменяем все горутины
time.Sleep(1 * time.Second)
fmt.Println("All workers stopped")
}Что происходит:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍6
Основные функции:
Установка:
go install github.com/essentialkaos/aligo/v2@latest
Пример использования:
sudo aligo --completion=bash 1> /etc/bash_completion.d/aligo
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥7❤2
Оптимизация использования памяти в Golang: когда переменная выделяется в куче
Основные моменты статьи:
➖ Анализ побега (Escape Analysis)
➖ Влияние на производительность
➖ Рекомендации по оптимизации
👉 Читать статью
👉 @juniorGolang | #cтатья
Основные моменты статьи:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3