📌Воспроизводимость и верификация для тулчейна Go
В заметке официального блога подробно разобрано, том, как сделать свои билды воспроизводимыми, как работала воспроизводимость в разных версия Go, и как устроена воспроизводимость в Go 1.21 .
📌Читать
@Golang_google
В заметке официального блога подробно разобрано, том, как сделать свои билды воспроизводимыми, как работала воспроизводимость в разных версия Go, и как устроена воспроизводимость в Go 1.21 .
📌Читать
@Golang_google
Вышла новая версии библиотеки 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
Типобезопасные перечисления для 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
Почитать:
— Как школьник с эпилеписей разбирался, или опыт участия в 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
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
Простой пример работы с Dockertest
▪Github
▪Example
@Golang_google
📌 Cтатья
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Обновление библиотеки 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
🔍 ScyllaDB в K8S: как справляться с интенсивными рабочими нагрузками на спотовых экземплярах без простоев
Почему не MongoDB?
Чем плоха Mongo?
• У нее открытый исходный код, поддерживается разделение данных, но совершенно иная архитектура — с единой точкой отказа. При «падении» главного узла, то есть координатора, в БД начинается отработка отказа, во время которого БД недоступна.
• Кроме того, для достижения высокой доступности каждый сегмент Mongo должен запускаться как набор реплик — больше узлов. Кольцевая архитектура Cassandra в этом смысле превосходнее. Драйвер Scylla «знает» о сегментах и добирается до конкретного узла/процессора, ответственного за запрашиваемую строку, делая распределение действительным.
• Но почему так важны отработка отказов без простоев и высокая доступность? На спотовых экземплярах — а это 1/4 стоимости вычислений — часто ежедневно случаются отработки отказов: узлы в k8s постоянно уничтожаются и воссоздаются, что чревато завершением всех запущенных в них подов/процессов, в том числе БД.
Установка Scylla
Сначала запустим локально, используя драйверы и что-нибудь на Cassandra Query Language:
Этой командой запустится одноузловой кластер Scylla. Так в режиме разработчика Scylla требуется минимум ресурсов в отличие от Cassandra, с которой у Docker Engine много работы.
Применение драйвера Scylla
Вот простой пример на Golang с использованием официального драйвера Scylla:
Здесь стоит обратить внимание вот на что:
Драйвером-клиентом TokenAware с помощью ключа раздела пробуется первый сегмент, затем методом циклического перебора — следующий, если первый недоступен. Для этого необходимо подключиться не к порту Cassandra по умолчанию 9042, а к порту Scylla с поддержкой сегментов 19042.
Попробуем простой запрос:
Переходим в облако
📌ПРОДОЛЖЕНИЕ
@Golang_google
Почему не MongoDB?
Чем плоха Mongo?
• У нее открытый исходный код, поддерживается разделение данных, но совершенно иная архитектура — с единой точкой отказа. При «падении» главного узла, то есть координатора, в БД начинается отработка отказа, во время которого БД недоступна.
• Кроме того, для достижения высокой доступности каждый сегмент Mongo должен запускаться как набор реплик — больше узлов. Кольцевая архитектура Cassandra в этом смысле превосходнее. Драйвер Scylla «знает» о сегментах и добирается до конкретного узла/процессора, ответственного за запрашиваемую строку, делая распределение действительным.
• Но почему так важны отработка отказов без простоев и высокая доступность? На спотовых экземплярах — а это 1/4 стоимости вычислений — часто ежедневно случаются отработки отказов: узлы в k8s постоянно уничтожаются и воссоздаются, что чревато завершением всех запущенных в них подов/процессов, в том числе БД.
Установка Scylla
Сначала запустим локально, используя драйверы и что-нибудь на Cassandra Query Language:
docker run -p 9042:9042 -p 7002:7000 -p 7001:7001 -p 9160:9160 -p 9180:9180 --name scylla --hostname scylla -d scylladb/scylla --smp 1 --developer-mode 1
Этой командой запустится одноузловой кластер Scylla. Так в режиме разработчика Scylla требуется минимум ресурсов в отличие от Cassandra, с которой у Docker Engine много работы.
Применение драйвера Scylla
Вот простой пример на Golang с использованием официального драйвера Scylla:
import "github.com/gocql/gocql"
func Connect(config Config) (*gocql.Session, error) {
cluster := gocql.NewCluster(config.Hosts...)
cluster.Keyspace = config.KeySpace
cluster.CQLVersion = "3.11"
cluster.RetryPolicy = &gocql.ExponentialBackoffRetryPolicy{
NumRetries: 5, Min: time.Millisecond * 5, Max: time.Second * 5}
cluster.ProtoVersion = 3
cluster.PoolConfig.HostSelectionPolicy = gocql.TokenAwareHostPolicy(
gocql.RoundRobinHostPolicy())
cluster.ConnectTimeout = time.Second * 10
cluster.Consistency = gocql.One
if config.Timeout != nil {
cluster.Timeout = *config.Timeout
}
cluster.Authenticator = gocql.PasswordAuthenticator{
Username: config.Username, //'cassandra' по умолчанию
Password: config.Password, //'cassandra' по умолчанию
}
session, err := cluster.CreateSession()
if err != nil {
return nil, err
}
return session, nil
}
Здесь стоит обратить внимание вот на что:
cluster.PoolConfig.HostSelectionPolicy = gocql.TokenAwareHostPolicy(
gocql.RoundRobinHostPolicy())
Драйвером-клиентом TokenAware с помощью ключа раздела пробуется первый сегмент, затем методом циклического перебора — следующий, если первый недоступен. Для этого необходимо подключиться не к порту Cassandra по умолчанию 9042, а к порту Scylla с поддержкой сегментов 19042.
Попробуем простой запрос:
func Ping(session *gocql.Session) error {
var str = new(string)
if err := session.Query("SELECT uuid() FROM system.local;").Scan(str); err != nil {
return err
}
if str == nil || len(*str) == 0 {
return errors.New("failed sanity check")
}
return nil
}
// альтернатива «select 1;» в SQL
Переходим в облако
📌ПРОДОЛЖЕНИЕ
@Golang_google