Golang Portal
8.12K subscribers
429 photos
27 videos
7 files
457 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Golang-разработчика

Связь: @devmangx
Download Telegram
Шпаргалка по Go

В формате PDF в комментариях

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
⚙️ conc — набор инструментов для структурированной конкурентности в Go, которые делают обычные задачи проще и безопаснее.

https://github.com/sourcegraph/conc

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
В чем разница между методами Time.Sub() и Time.Add() пакета time?

В пакете 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() — для добавления интервала времени к конкретной временной метке.

👉 @juniorGolang
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1
Глубокое погружение в массивы и срезы Go

Статья предлагает детальный обзор массивов и срезов в Go

Также обсуждаются темы управления памятью, копирования данных, и практические примеры кода, показывающие, как работать с этими структурами данных

🔜 Читать

👉 @juniorGolang | #cтатья
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 | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
👩‍💻 Script

Это библиотека на языке Go для выполнения тех задач, которые хорошо умеют делать shell-скрипты: чтение файлов, выполнение подпроцессов, подсчет строк, сопоставление строк и так далее.

Почему бы не сделать так, чтобы писать программы системного администрирования на Go было так же легко, как и в обычном shell? script призван сделать это именно таким образом.

🔜 https://github.com/bitfield/script

👉 @juniorGolang | #ресурсы
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татья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍43
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 | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5🔥2🤔1
Gopherlings

Репозиторий с простыми и небольшими задачами по Go, которые необходимо исправить.

🔜 https://github.com/soypat/gopherlings

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Создание кастомного балансировщика нагрузки на Go для gRPC с приоритизацией адресов

Это решение позволяет гибко управлять распределением клиентских запросов между серверами с разными уровнями доступности и обеспечивает подключение к оптимальному ЦОД с минимальными задержками.

👉 Читать

👉 @juniorGolang | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Как использовать пакет context в Go? 🕒

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

1️⃣ Создание контекста с тайм-аутом

Контекст с тайм-аутом автоматически отменяет операцию, если она не завершилась за указанное время

Пример:
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")
}

Что здесь происходит:
🔹context.WithTimeout создаёт контекст, который завершится через 1 секунду.
🔹Функция doWork проверяет канал ctx.Done() для отмены.

Результат: работа прерывается через 1 секунду.

2️⃣ Контекст с дедлайном

Дедлайн задаёт фиксированное время завершения.

ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2*time.Second))
defer cancel()

Это полезно для заданий, где нужно строгое время завершения

3️⃣ Встраивание значений в контекст

Контекст может передавать данные между частями программы. Используйте 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)
}

Когда использовать:
🔹Передача метаданных, например, ID пользователя, токенов аутентификации.
🔹Не используйте контекст для передачи больших объёмов данных.

4️⃣ Прерывание нескольких горутин

Контекст позволяет координировать отмену между несколькими горутинами:
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")
}

Что происходит:
🔹Отмена контекста (cancel) сигнализирует всем горутинам остановиться через ctx.Done().

5️⃣ Советы:

🔹Используйте context только для управления временем выполнения и метаданными. Не передавайте через контекст сложные данные.
🔹Добавляйте тайм-ауты ко всем сетевым операциям. Это помогает избежать зависания при проблемах с соединением.
🔹Обязательно вызывайте cancel() для освобождения ресурсов

👉 @juniorGolang | #заметки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍6
⚙️ Aligo — это инструмент для анализа и оптимизации структур данных в языке Go. Он помогает выявлять и устранять неэффективности в использовании памяти, делая ваш код более производительным.

Основные функции:
🔹 Проверка структур
🔹 Совместимость с GitHub Actions
🔹 Поддержка командной строки
🔹 Генерация man-документов
🔹 Возможность игнорирования структур

Установка:
go install github.com/essentialkaos/aligo/v2@latest


Пример использования:
sudo aligo --completion=bash 1> /etc/bash_completion.d/aligo


👉 https://github.com/essentialkaos/aligo?tab=readme-ov-file

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥72
Оптимизация использования памяти в Golang: когда переменная выделяется в куче

Основные моменты статьи:
Анализ побега (Escape Analysis)
Влияние на производительность
Рекомендации по оптимизации

👉 Читать статью

👉 @juniorGolang | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3