37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
📌Воспроизводимость и верификация для тулчейна 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
🔍 ScyllaDB в K8S: как справляться с интенсивными рабочими нагрузками на спотовых экземплярах без простоев

Почему не 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