37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
👣 Tork

Интересная статья и 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
👣 Написание безопасных для использования библиотек

Автор создал довольно много CLI-инструментов (например, enc и sourcemap) и допустил немало ошибок при написании кода. Каждый раз, когда он совершал ошибку, писал о ней заметку и свои мысли, как он мог бы предотвратить ее в будущем. В данном конкретном случае результатом этих заметок стала библиотека cliff и эта статья в блоге, описывающая приемы, которые автор использовал, чтобы сделать эту библиотеку безопасной для работы.

https://blog.orsinium.dev/posts/go/safe-api/

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Стань ментором по Go
Привет! Это Эйч Навыки — небольшая команда Гоферов, которые создали менторскую программу, чтобы помогать ребятам перейти с других языков на Go, а Гоферам — увеличить свой грейд или найти крутую работу.

Заявок на менторство у нас становится всё больше, поэтому мы ищем Middle и Senior Гоферов, которые хотели бы прокачать в себе скилл менторства.

Что получишь, если станешь ментором:
- Научишься растить других и давать фидбек — добавишь такую крутую строчку в резюме для работы в России или за рубежом
- Прокачаешь личный бренд — сможешь выступать с лекциями и интервью на нашем YouTube-канале, где видео собирают до 50 000 просмотров
- Сможешь обмениваться опытом в сообществе с другими менторами из Яндекса, Uber, Tinkoff и других крутых компаний
- Деньги тоже будут

Что нужно, чтобы стать ментором?
- Пройти небольшое интервью
- Готовность тратить от двух часов в неделю

Если хочешь попробовать, заполни небольшую гугл-форму, позже мы свяжемся с тобой и расскажем подробности: https://docs.google.com/forms/d/e/1FAIpQLSdS0mFXltUOkwLglMFARQ-f28N5AQv7RVsKGlAtjTmQc3DExg/viewform
👣 ipfuscator

ipfuscator - это быстрый, потокобезопасный, простой и не требующий выделения памяти инструмент на Go для быстрой генерации IP(v4) адресов.

go install github.com/dwisiswant0/ipfuscator@latest

Github
Документация

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как создать клон Twitter или управляемое данными приложение с Golang и Kafka

Сейчас в каждом приложении лента с содержимым персонализируется в зависимости от интересов пользователя.

Например, введите что-либо в поиске 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
📌Воспроизводимость и верификация для тулчейна Go

В заметке официального блога подробно разобрано, том, как сделать свои билды воспроизводимыми, как работала воспроизводимость в разных версия Go, и как устроена воспроизводимость в Go 1.21 .

📌Читать

@Golang_google
👣 Excelize

Вышла новая версии библиотеки 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
👣 enum

Типобезопасные перечисления для Go без генерации кода и рефлексии.

go get github.com/orsinium-labs/enum

Github
Docs

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира : 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
👣 Что выведет код ?

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
Что выведет код ?
Anonymous Quiz
35%
true true
22%
false true
27%
false false
16%
true false
👣 Golightly brings the LightGBM ML library into the Go ecosystem

Golightly новый фреймворк Go машинного обучения для решения задач: регрессии, классификации, ранжирования и т.д.

Golightly предоставляет обертку для LightGBM.

LightGBM — это фреймворк, который предоставляет реализацию деревьев принятия решений с градиентным бустингом.

LightGBM известен своей высокой скоростью обучения, хорошей точностью с параметрами по умолчанию, параллельным и GPU обучением, малым использованием памяти и возможностью обработки больших датасетов, которые не всегда помещаются в ней.

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Dockertest - это замечательная библиотека, позволяющая управлять контейнерами docker для тестов. Вместо использования docker compose или других настроек (вне тестов) мы можем создавать чистую среду docker при каждом запуске.

Простой пример работы с Dockertest

Github
Example

@Golang_google
👣 Интересная статья - Как улучшить консистентность и производительность краулера на Go с помощью retry logics и настройки сети.

📌 Cтатья

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Lingua Go

Обновление библиотеки Lingua Go, которая позволяет определить, на каком языке написан тот или иной текст. Это очень полезно в качестве этапа предварительной обработки лингвистических данных в приложениях обработки естественного языка, таких как классификация текстов и проверка орфографии.

Другие варианты использования, например, могут включать маршрутизацию документации/электронных писем в нужный географически расположенный отдел обслуживания клиентов на основе языка документов/писем.

В настоящее время поддерживаются 75 языков.

go get github.com/pemistahl/lingua-go

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM