Интересная статья и opensource проект "Построение распределенного механизма документооборота с нуля".
Архитектура проекта:
📌Coordinator: отвечает за управление жизненным циклом задачи через ее различные состояния и за предоставление клиентам REST API.
📌Worker: отвечает за выполнение задач.
📌Broker: очередь сообщений, механизм pub/sub, используемый для маршрутизации задач.
📌Хранилище данных: хранит состояние тасков и воркеров.
📌Runtime: платформа, используемая воркеров для выполнения тасков. В настоящее время поддерживается только Docker.
▪Backend
▪Web U
▪Пост
@Golang_google
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤9👍5🔥3
  Автор создал довольно много CLI-инструментов (например, enc и sourcemap) и допустил немало ошибок при написании кода. Каждый раз, когда он совершал ошибку, писал о ней заметку и свои мысли, как он мог бы предотвратить ее в будущем. В данном конкретном случае результатом этих заметок стала библиотека cliff и эта статья в блоге, описывающая приемы, которые автор использовал, чтобы сделать эту библиотеку безопасной для работы.
https://blog.orsinium.dev/posts/go/safe-api/
@Golang_google
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍7🔥5❤2🤔2
  Стань ментором по Go
Привет! Это Эйч Навыки — небольшая команда Гоферов, которые создали менторскую программу, чтобы помогать ребятам перейти с других языков на Go, а Гоферам — увеличить свой грейд или найти крутую работу.
Заявок на менторство у нас становится всё больше, поэтому мы ищем Middle и Senior Гоферов, которые хотели бы прокачать в себе скилл менторства.
Что получишь, если станешь ментором:
- Научишься растить других и давать фидбек — добавишь такую крутую строчку в резюме для работы в России или за рубежом
- Прокачаешь личный бренд — сможешь выступать с лекциями и интервью на нашем YouTube-канале, где видео собирают до 50 000 просмотров
- Сможешь обмениваться опытом в сообществе с другими менторами из Яндекса, Uber, Tinkoff и других крутых компаний
- Деньги тоже будут
Что нужно, чтобы стать ментором?
- Пройти небольшое интервью
- Готовность тратить от двух часов в неделю
Если хочешь попробовать, заполни небольшую гугл-форму, позже мы свяжемся с тобой и расскажем подробности: https://docs.google.com/forms/d/e/1FAIpQLSdS0mFXltUOkwLglMFARQ-f28N5AQv7RVsKGlAtjTmQc3DExg/viewform
Привет! Это Эйч Навыки — небольшая команда Гоферов, которые создали менторскую программу, чтобы помогать ребятам перейти с других языков на Go, а Гоферам — увеличить свой грейд или найти крутую работу.
Заявок на менторство у нас становится всё больше, поэтому мы ищем Middle и Senior Гоферов, которые хотели бы прокачать в себе скилл менторства.
Что получишь, если станешь ментором:
- Научишься растить других и давать фидбек — добавишь такую крутую строчку в резюме для работы в России или за рубежом
- Прокачаешь личный бренд — сможешь выступать с лекциями и интервью на нашем YouTube-канале, где видео собирают до 50 000 просмотров
- Сможешь обмениваться опытом в сообществе с другими менторами из Яндекса, Uber, Tinkoff и других крутых компаний
- Деньги тоже будут
Что нужно, чтобы стать ментором?
- Пройти небольшое интервью
- Готовность тратить от двух часов в неделю
Если хочешь попробовать, заполни небольшую гугл-форму, позже мы свяжемся с тобой и расскажем подробности: https://docs.google.com/forms/d/e/1FAIpQLSdS0mFXltUOkwLglMFARQ-f28N5AQv7RVsKGlAtjTmQc3DExg/viewform
👍7
  ipfuscator - это быстрый, потокобезопасный, простой и не требующий выделения памяти инструмент на Go для быстрой генерации IP(v4) адресов.
go install github.com/dwisiswant0/ipfuscator@latest▪Github
▪Документация
@Golang_google
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤10👍5🔥2👎1
  Сейчас в каждом приложении лента с содержимым персонализируется в зависимости от интересов пользователя.
Например, введите что-либо в поиске YouTube, и за минуты временна́я шкала заполнится видео, релевантными вашему запросу. Создадим подобное приложение — простую реплику Twitter с временно́й шкалой для каждого пользователя. Исходя из взаимодействия с твитами, определим предпочтения пользователей, чтобы показать им еще больше твитов.
Создание простого Twitter
Сначала необходимо сделать простой Twitter, твиты будем сохранять не в БД постоянного хранения, а в экземпляре Redis:
type Redis[T models.Keyer] struct {
   rdb *redis.Client
}
func NewRedis[T models.Keyer](rdb *redis.Client) Redis[T] {
   r := Redis[T]{rdb: rdb}
   return r
}
func (r Redis[T]) Save(ctx context.Context, k T) error {
   b, _ := json.Marshal(k)
   return r.rdb.Set(ctx, k.Key(), b, 0).Err()
}
func (r Redis[T]) Get(ctx context.Context, key string) (T, error) {
   var t T
   b, err := r.rdb.Get(ctx, key).Bytes()
   if err != nil {
      return t, err
   }
   json.Unmarshal(b, &t)
   return t, nil
}
Для облегчения сериализации мы создали простую обертку Redis, которой применяются дженерики Golang, и определили новый интерфейс Keyer:
type Keyer interface {
   Key() string
}
type Tweet struct {
   UID    string `json:"UID"`
   Author string `json:"author"`
   Tweet  string `json:"tweet"`
}
func (t Tweet) Key() string {
   return "tweet:" + t.UID
}
Применяя обыкновенный HTTP-маршрутизатор, запускаем простейшую реплику Twitter:
func main() {
   rdb := redis.NewClient(&redis.Options{
      Addr: "localhost:6379",
   })
   tweetService := services.NewSaveTweet(repositories.NewRedis[models.Tweet](rdb))
   e := echo.New()
   e.POST("/tweet", func(c echo.Context) error {
      content := c.Request().PostFormValue("tweet")
      author := c.Request().PostFormValue("author")
      tweet := models.Tweet{Tweet: content, Author: author}
      tweet, err := tweetService.Save(c.Request().Context(), tweet)
      if err != nil {
         return c.String(500, err.Error())
      }
      return c.String(201, tweet.UID)
   })
   e.GET("/tweet/:uid", func(c echo.Context) error {
      uid := c.Param("uid")
      tweet, err := tweetService.Get(c.Request().Context(), uid)
      if errors.Is(err, redis.Nil) {
         return c.String(404, "tweet not found")
      } else if err != nil {
         return c.String(500, err.Error())
      }
      return c.String(200, tweet.Author+" : "+tweet.Tweet)
   })
   e.Logger.Fatal(e.Start(":1323"))
}📌Читать дальше
@Golang_google
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍17🔥4😁4❤1
  📌Воспроизводимость и верификация для тулчейна Go
В заметке официального блога подробно разобрано, том, как сделать свои билды воспроизводимыми, как работала воспроизводимость в разных версия Go, и как устроена воспроизводимость в Go 1.21 .
📌Читать
@Golang_google
В заметке официального блога подробно разобрано, том, как сделать свои билды воспроизводимыми, как работала воспроизводимость в разных версия Go, и как устроена воспроизводимость в Go 1.21 .
📌Читать
@Golang_google
👍7🔥2❤1
  Вышла новая версии библиотеки Excelize 2.8.0. В ней появилось несколько новых функций и исправлено множество ошибок.
Excelize это библиотека, написанная на Go и предоставляющая набор функций, позволяющих работать с
XLAM / XLSM / XLSX / XLTM / XLTX. Поддерживает чтение и запись документов электронных таблиц, сгенерированных Microsoft Excel™ 2007 и более поздними версия.go get github.com/xuri/excelize▪Github
▪Список обновлений
@Golang_google
Please open Telegram to view this post
    VIEW IN TELEGRAM
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍29🔥4❤3
  Типобезопасные перечисления для Go без генерации кода и рефлексии.
go get github.com/orsinium-labs/enum▪Github
▪Docs
@Golang_google
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍26😁5❤3🔥3
  🔥 Дайджест полезных материалов из мира : Golang за неделю
Почитать:
— Как школьник с эпилеписей разбирался, или опыт участия в True Tech Hack
— Мультиплатформенность приложений в 2023
— How to build a Cambridge Dictionary API in GO
— Simplifying your Kubernetes infrastructure with cdk8s
— Difference between Godotenv vs Viper in Golang
— Building a Golang Project from Scratch - Zero to Hero - Part 1
— Rate Limiters: Why should we care about our 429s
— Advent of Code: Investigating performance improvements in Go
— DynamoDB Streams EventBridge Pipes Enrichment
— Golang 1.21 is here (Part 2)
— Interfaces and Embedding in Golang (Go)
— How to create your first Golang Lambda With Serverless Framework
Посмотреть:
🌐 Уроки Golang с нуля /#25 - Интерфейсы (⏱ 10:51)
🌐 Многопоточный парсер на Python. ООП подход (⏱ 08:24)
🌐 Collaboration Tool With Raylib And Golang Experiment (⏱ 01:43:29)
🌐 Drawing Collaboration Tool With Raylib And Golang Experiment (⏱ 00:00)
🌐 Golang Open Source Work - Distributed Systems With Hollywood (⏱ 01:48:07)
🌐 Indie Golang Game Dev - Player debufs (⏱ 44:12)
🌐 Разбираю задачу с Go собеседования | Собеседование Golang разработчика (⏱ 05:48)
Хорошего дня!
@Golang_google
Почитать:
— Как школьник с эпилеписей разбирался, или опыт участия в True Tech Hack
— Мультиплатформенность приложений в 2023
— How to build a Cambridge Dictionary API in GO
— Simplifying your Kubernetes infrastructure with cdk8s
— Difference between Godotenv vs Viper in Golang
— Building a Golang Project from Scratch - Zero to Hero - Part 1
— Rate Limiters: Why should we care about our 429s
— Advent of Code: Investigating performance improvements in Go
— DynamoDB Streams EventBridge Pipes Enrichment
— Golang 1.21 is here (Part 2)
— Interfaces and Embedding in Golang (Go)
— How to create your first Golang Lambda With Serverless Framework
Посмотреть:
🌐 Уроки Golang с нуля /#25 - Интерфейсы (⏱ 10:51)
🌐 Многопоточный парсер на Python. ООП подход (⏱ 08:24)
🌐 Collaboration Tool With Raylib And Golang Experiment (⏱ 01:43:29)
🌐 Drawing Collaboration Tool With Raylib And Golang Experiment (⏱ 00:00)
🌐 Golang Open Source Work - Distributed Systems With Hollywood (⏱ 01:48:07)
🌐 Indie Golang Game Dev - Player debufs (⏱ 44:12)
🌐 Разбираю задачу с Go собеседования | Собеседование Golang разработчика (⏱ 05:48)
Хорошего дня!
@Golang_google
👍16🔥7❤1😁1
  package main
import "reflect"
func main() {
 f := func() {}
 s := []func(){f, f, f, f, f, f}
 x := s[1:4]
 y := s[3:6]
 z := x[2:5]
 println(
  reflect.DeepEqual(x, y),
  reflect.DeepEqual(y, z),
 )
}📌Запустить код
#junior #quiz
@Golang_google
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🤯23👍7❤1🔥1
  🤯20👍9❤2🤔2😁1😢1
  Golightly новый фреймворк Go машинного обучения для решения задач: регрессии, классификации, ранжирования и т.д.
Golightly предоставляет обертку для LightGBM.
LightGBM — это фреймворк, который предоставляет реализацию деревьев принятия решений с градиентным бустингом.
LightGBM известен своей высокой скоростью обучения, хорошей точностью с параметрами по умолчанию, параллельным и GPU обучением, малым использованием памяти и возможностью обработки больших датасетов, которые не всегда помещаются в ней.
▪Github
@Golang_google
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍12🔥2❤1👎1
  Dockertest - это замечательная библиотека, позволяющая управлять контейнерами docker для тестов. Вместо использования docker compose или других настроек (вне тестов) мы можем создавать чистую среду docker при каждом запуске.
Простой пример работы с Dockertest
▪Github
▪Example
@Golang_google
Простой пример работы с Dockertest
▪Github
▪Example
@Golang_google
❤18👍5🔥5🤔5
  📌 Cтатья
@Golang_google
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍8❤1🔥1