🇺🇦 Go for two :)
1.18K subscribers
22 photos
3 files
184 links
Telegram channel about tricks and engineering practices in the Go programming language over a cup of coffee ☕️.

author: @a_soldatenko
personal blog: https://asoldatenko.org

#golang #go #kubernetes #debugging
加入频道
gitbatch утилита для управления сразу несколькими git репозиториями)

tl;dr https://asciinema.org/a/lxoZT6Z8fSliIEebWSPVIY8ct

https://github.com/isacikgoz/gitbatch
Если вы интересуетесь eBPF, то вот вам примеры от Leo создателя Falco.

https://github.com/leodido/go-ebpf-examples

P.S. под капотом тот самый https://github.com/iovisor/gobpf о котором я писал уже ранее -> https://yangx.top/golang_for_two/96
FOSDEM 2021 Go dev room

В этом году FOSDEM пройдет online, в субботу 6 февраля!

И уже есть расписание https://fosdem.org/2021/schedule/track/go/
Всем известный Ben Johnson, он же автор BoltDB сегодня зарелизил новый проект Litestream.

Litestream - инструмент потоковой (stream) репликации для SQLite. Он работает как фоновый процесс и безопасно реплицирует частичные изменения в другой файл или AWS S3. Litestream взаимодействует с SQLite только через API SQLite, поэтому он безопасен для ваших данных.

Как обычно фидбэк в твиттер автору: https://twitter.com/benbjohnson/status/1354468790558281731

Ссылка на код: https://github.com/benbjohnson/litestream
Сегодня зарелизился Delve v1.6.0

Из важных изменений:
- Go 1.16 support, Apple M1 support, syntax highlighting for code blocks, and more!


dlv version
Delve Debugger
Version: 1.6.0
Build: 75485427957fba167a6eaca76b1ee9549d62916f

Полный CHANGELOG -> https://github.com/go-delve/delve/blob/master/CHANGELOG.md#160-2021-01-28
Automatically Detecting and Fixing Concurrency Bugs in Go
Software Systems

https://songlh.github.io/paper/gcatch.pdf

Также у автора есть интересный репозиторий https://github.com/system-pclub/go-concurrency-bugs

Ну и список багов

https://docs.google.com/spreadsheets/d/1mDxB6IRxrTodF9CrmpUu72E6673y5s9BkjKuTjtx1qc/edit#gid=0

подсмотрел у https://twitter.com/dgryski
golang deep comparison for testing:

https://github.com/maxatome/go-testdeep

import (
"testing"
"time"
)

func TestCreateRecord(t *testing.T) {
before := time.Now().Truncate(time.Second)
record, err := CreateRecord()

if err != nil {
t.Errorf("An error occurred: %s", err)
} else {
expected := Record{Name: "Bob", Age: 23}

if record.Id == 0 {
t.Error("Id probably not initialized")
}
if before.After(record.CreatedAt) ||
time.Now().Before(record.CreatedAt) {
t.Errorf("CreatedAt field not expected: %s", record.CreatedAt)
}
if record.Name != expected.Name {
t.Errorf("Name field differs, got=%s, expected=%s",
record.Name, expected.Name)
}
if record.Age != expected.Age {
t.Errorf("Age field differs, got=%s, expected=%s",
record.Age, expected.Age)
}
}
}

можно переписать в:
import (
"testing"
"time"

"github.com/maxatome/go-testdeep/td"
)

func TestCreateRecord(t *testing.T) {
before := time.Now().Truncate(time.Second)
record, err := CreateRecord()

if td.CmpNoError(t, err) {
td.Cmp(t, record.Id, td.NotZero(), "Id initialized")
td.Cmp(t, record.Name, "Bob")
td.Cmp(t, record.Age, 23)
td.Cmp(t, record.CreatedAt, td.Between(before, time.Now()))
}
}


P.S. в проде не юзал но выглядит аккуратно, особенно когда происходит расхождение с ожидаемым результатом.
A Golang library for generating high-entropy random passwords similar to 1Password or LastPass.

Example passwords this library may generate:
0N[k9PhDqmmfaO`p_XHjVv`HTq|zsH4XiH8umjg9JAGJ#\Qm6lZ,28XF4{X?3sHj
7@90|0H7!4p\,c<!32:)0.9N
UlYuRtgqyWEivlXnLeBpZvIQ
Q795Im1VR5h363s48oZGaLDa
wpvbxlsc


https://github.com/sethvargo/go-password

Из интересного сразу идет моком для тестов:
// func MyFunc(p *password.Generator)
func MyFunc(p password.PasswordGenerator) {
// ...
}

func TestMyFunc(t *testing.T) {
gen := password.NewMockGenerator("canned-response", false)
MyFunc(gen)
}
Docker Security Cheat Sheet:

RULE #0 - Keep Host and Docker up to date
RULE #1 - Do not expose the Docker daemon socket (even to the containers)
RULE #2 - Set a user
RULE #3 - Limit capabilities (Grant only specific capabilities, needed by a container)
RULE #4 - Add –no-new-privileges flag
RULE #5 - Disable inter-container communication (--icc=false)
RULE #6 - Use Linux Security Module (seccomp, AppArmor, or SELinux)
RULE #7 - Limit resources (memory, CPU, file descriptors, processes, restarts)
RULE #8 - Set filesystem and volumes to read-only
RULE #9 - Use static analysis tools
RULE #10 - Set the logging level to at least INFO
Rule #11 - Lint the Dockerfile at build time

more details about each rule: https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html
Source: https://github.com/OWASP/CheatSheetSeries
Practical Go Lessons Book

https://www.practical-go-lessons.com/

По словам автора, он начал писать эту книгу в 2018 по ночам и по выходным, а в конце 2020 года уволился с основной работы и начал писать книгу фул тайм 😱. Огромный респект автору.
Книга подходит больше новичкам, мне очень понравились иллюстрации которых очень много! [405 штук]
Kubernetes deployment strategies

Коротко о том какие в k8s есть стратегии деплоя с примерами:

https://github.com/ContainerSolutions/k8s-deployment-strategies

tl;dr:
* recreate: terminate the old version and release the new one
* ramped: release a new version on a rolling update fashion, one after the other
* blue/green: release a new version alongside the old version then switch traffic
* canary: release a new version to a subset of users, then proceed to a full rollout
* a/b testing: release a new version to a subset of users in a precise way (HTTP headers, cookie, weight, etc.). This doesn’t come out of the box with Kubernetes, it imply extra work to setup a smarter loadbalancing system (Istio, Linkerd, Traeffik, custom nginx/haproxy, etc).
* shadow: release a new version alongside the old version. Incoming traffic is mirrored to the new version and doesn't impact the response.
23 апреля приглашаем всех гоферов на GopherCon Russia 2021: online, бесплатно, лучшие доклады, стенды партнёров, горячие споры в чатах! Среди спикеров этого года Mat Ryer, Aaron Schlesinger и Felix Geisendörfer. А для тех, кто хочет не только пообщаться и послушать доклады, но и прокачать свои навыки на практике, подготовили 4 воркшопа: Kubernetes-операторы, линтеры с ruleguard, профилирование и оптимизация, Fuzz и Property-Based тесты. Все подробности регистрация на https://www.gophercon-russia.ru/