🇺🇦 Go for two :)
Note #35 GopherCon UK 2019 videos Опубликовали видео с GopherCon UK 2019 🎉🍾👀 https://www.youtube.com/playlist?list=PLDWZ5uzn69ezokLCB-nGgYInxL0uP1PeZ#gopherconuk Приятного просмотра! P.S. позже сделаю рейтинг (top10)
Top 10 докладов по кол-ву просмотров и лайков :)
1. GopherCon UK + GoTimeFM + LondonGophers Live
2. GopherCon UK 2019: Gergely Brautigam - Robotics with Go is a Breeze
3. GopherCon UK 2019: Gautam Rege - Impossible Go!
4. GopherCon UK 2019: Jorge Marin - Experimenting with Golang and Webassembly
5. GopherCon UK 2019: Daniela Petruzalek - Fun With Pointers
6. GopherCon UK 2019: Elias Naur - Gio Cross Platform GUI Programming for Mobile, Desktop, WebAssembly
7. GopherCon UK 2019: Ricardo Jimenez - Quicksilver How Cloudflare Controls it's Network Using Go
8. GopherCon UK 2019: Johan Brandhorst - Writing REST Services for the gRPC curious
9. GopherCon UK 2019: Joan López de la Franca Beltran - From Chaos to Domain Driven Design
10. GopherCon UK 2019: Alan Braithwaite - Advanced Testing Techniques
P.S. стоит всегда помнить, что любая конференция - это больше про нетворкинг, чем про контент или что-то новое :)
1. GopherCon UK + GoTimeFM + LondonGophers Live
2. GopherCon UK 2019: Gergely Brautigam - Robotics with Go is a Breeze
3. GopherCon UK 2019: Gautam Rege - Impossible Go!
4. GopherCon UK 2019: Jorge Marin - Experimenting with Golang and Webassembly
5. GopherCon UK 2019: Daniela Petruzalek - Fun With Pointers
6. GopherCon UK 2019: Elias Naur - Gio Cross Platform GUI Programming for Mobile, Desktop, WebAssembly
7. GopherCon UK 2019: Ricardo Jimenez - Quicksilver How Cloudflare Controls it's Network Using Go
8. GopherCon UK 2019: Johan Brandhorst - Writing REST Services for the gRPC curious
9. GopherCon UK 2019: Joan López de la Franca Beltran - From Chaos to Domain Driven Design
10. GopherCon UK 2019: Alan Braithwaite - Advanced Testing Techniques
P.S. стоит всегда помнить, что любая конференция - это больше про нетворкинг, чем про контент или что-то новое :)
Note# 37 Что делать, если Go сервисы видны наружу в интернет?
Оказывается то, что мы давно привыкли прятать сервисы за nginx(и альтернативы), Filippo Valsorda(широко известный в узких кругах по своим контрибьюшинам в Go, особоенно в пакет crypto) в своей статье[1], давно эксперементирует над тем, чтобы окрывать сервисы наружу на чистом Go (net/http, crypto/tls):
- как добавить сертификаты?
- редирект http -> https
- http/2
- добавляем таймауты и TCPKeepAlive,
- логгирование и сбор метрики,
- и огромное кол-во секьрити и не только багофиксов
Так же по его словам это вполне реально уже с go 1.8. Статья хоть и конца 2018 года, остается актуальной и сегодня...
Links:
- https://blog.cloudflare.com/exposing-go-on-the-internet/
Оказывается то, что мы давно привыкли прятать сервисы за nginx(и альтернативы), Filippo Valsorda(широко известный в узких кругах по своим контрибьюшинам в Go, особоенно в пакет crypto) в своей статье[1], давно эксперементирует над тем, чтобы окрывать сервисы наружу на чистом Go (net/http, crypto/tls):
- как добавить сертификаты?
- редирект http -> https
- http/2
- добавляем таймауты и TCPKeepAlive,
- логгирование и сбор метрики,
- и огромное кол-во секьрити и не только багофиксов
Так же по его словам это вполне реально уже с go 1.8. Статья хоть и конца 2018 года, остается актуальной и сегодня...
Links:
- https://blog.cloudflare.com/exposing-go-on-the-internet/
The Cloudflare Blog
So you want to expose Go on the Internet
Back when crypto/tls was slow and net/http young, the general wisdom was to always put Go servers behind a reverse proxy like NGINX. That's not necessary anymore!
Note #38 Go time 102: Application design 📻🎤
В этому выпуске Kat Zień, Peter Bourgon и Ben Johnson обсуждают тему, которая затрагивает каждый Go проект: как лучше всего организовать проект.
Краткое содержание интересных идей из эпизода:
1) выбираем структуру проекта в зависимости от вашего приложения/контекста, полезно лишний раз обсуждать с коллегами
2) никогда не используем “Global state”
3) Используем io.Reader/io.Writer вместо os.Stdout/os.Stdin для того, чтобы передавать buffer в тестах, тем самым контролировать поток ввода/вывода и логирование.
4) tiny main abstraction
6) Пишем код который легко удалить, а не тот который легко расширить. 🔪
7) Не следует писать код - лишь бы удовлетворить компилятор, помним: мы пишем код для людей.
8) Фокусируемся на happy path, если пользователь что-то покупает - самое главное это как можно быстрее вернуть результат об успешной транзакции, а не упасть из-за того что лого не подгрузилось или email не отправился.
9) Начинаем с кода который выполняется последовательно и только позже добавляем concurrency.
P.S. От себя добавлю, что очень часто просматриваю как организованы чужие проекты на github. Например недавно, пересмотрел как организованы такие консольные утилиты как (docker, kubectl, helm3, doctl и так далее), что очень часто помогает выбрать наиболее удачную структуру.
https://changelog.com/gotime/102
В этому выпуске Kat Zień, Peter Bourgon и Ben Johnson обсуждают тему, которая затрагивает каждый Go проект: как лучше всего организовать проект.
Краткое содержание интересных идей из эпизода:
1) выбираем структуру проекта в зависимости от вашего приложения/контекста, полезно лишний раз обсуждать с коллегами
2) никогда не используем “Global state”
3) Используем io.Reader/io.Writer вместо os.Stdout/os.Stdin для того, чтобы передавать buffer в тестах, тем самым контролировать поток ввода/вывода и логирование.
4) tiny main abstraction
func main() {5) Пишем только то, что нужно прямо сейчас.
if err := run(); err != nil {
fmt.FPrintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
}
// dummy
func run() error {
return nil
}
6) Пишем код который легко удалить, а не тот который легко расширить. 🔪
7) Не следует писать код - лишь бы удовлетворить компилятор, помним: мы пишем код для людей.
8) Фокусируемся на happy path, если пользователь что-то покупает - самое главное это как можно быстрее вернуть результат об успешной транзакции, а не упасть из-за того что лого не подгрузилось или email не отправился.
9) Начинаем с кода который выполняется последовательно и только позже добавляем concurrency.
P.S. От себя добавлю, что очень часто просматриваю как организованы чужие проекты на github. Например недавно, пересмотрел как организованы такие консольные утилиты как (docker, kubectl, helm3, doctl и так далее), что очень часто помогает выбрать наиболее удачную структуру.
https://changelog.com/gotime/102
Changelog
On application design with Peter Bourgon, Kat Zień & Ben Johnson (Go Time #102)
Mat is joined by Peter Bourgon, Kat Zień, and Ben Johnson to talk about application design in Go — principles, trade-offs, common mistakes, patterns, and the things you should consider when it comes to application design.
Note #39 Import declaration 3 times
Сегодня наткнулся на интересный пример, если импортировать пакет 3 раза:
Что же тут интересного скажете Вы?!
- Go не запрещает импортировать один и тот же пакет если вы присваиваете каждому из них уникальный алиас. [1]
- Даже если вы импортируете пакет
- Пакет будет доступен по всем 3 алиасам как показано в примере выше.
Реальный пример, где это может пригодиться, есть метод в параметрах которой есть
P.S. Я видел такой трюк несколько раз, и удивился, что это стало находкой для Brad Fitzpatrick [2] в PR об удалении переменной parseURL [3].
Links:
[1] https://golang.org/ref/spec#Import_declarations
[2] https://twitter.com/bradfitz/status/1186368288797777920
[3] https://go-review.googlesource.com/c/go/+/202482
Сегодня наткнулся на интересный пример, если импортировать пакет 3 раза:
package main
import "math" // math.Sin
import m "math" // m.Sin
import k "math" // k.Sin
func main() {
print(math.Pi, m.Pi, k.Pi)
}
Что же тут интересного скажете Вы?!
- Go не запрещает импортировать один и тот же пакет если вы присваиваете каждому из них уникальный алиас. [1]
- Даже если вы импортируете пакет
math
3 раза, то он будет импортироваться только 1 раз- Пакет будет доступен по всем 3 алиасам как показано в примере выше.
Реальный пример, где это может пригодиться, есть метод в параметрах которой есть
path
и также path
имя пакета который нам нужен внутри функции:import (
"path"
pathpkg "path"
)
func (ld *loader) stdVendor(parentPath, path string) string {
// missing few lines here
vendorPath := pathpkg.Join("cmd", "vendor", path)
// missing few lines here
P.S. Я видел такой трюк несколько раз, и удивился, что это стало находкой для Brad Fitzpatrick [2] в PR об удалении переменной parseURL [3].
Links:
[1] https://golang.org/ref/spec#Import_declarations
[2] https://twitter.com/bradfitz/status/1186368288797777920
[3] https://go-review.googlesource.com/c/go/+/202482
Note #40 gops - list of your go process currently running
Нашел отличный тул
С помощью
Больше примеров как обычно в README [1]
Links:
[1] https://github.com/google/gops
Нашел отличный тул
gops
, которые показывает список Go процессов, которые сейчас запущены.$ go get -u github.com/google/gops
С помощью
gops
легко посмотреть версию Go бинарника который сейчас запущен:$ gops
64186 81994 gops go1.13 /Users/andrii/workspace/bin/gops
76 1 com.docker.vmnetd go1.12.7 /Library/PrivilegedHelperTools/com.docker.vmnetd
….
$ gops tree
├── 81994
│ └── 70280 (gops) {go1.13}
├── 1
│ ├── 76 (com.docker.vmnetd) {go1.12.7}
│ ├── 28657 (updater) {go1.13}
│ ├── 28669 (kbfs) {go1.13}
│ └── 28663 (keybase) {go1.13}
├── 5099
│ ├── 5106 (com.docker.backend) {go1.12.7}
│ └── 5104 (com.docker.driver.amd64-linux) {go1.12.7}
└── 5032
Больше примеров как обычно в README [1]
Links:
[1] https://github.com/google/gops
GitHub
GitHub - google/gops: A tool to list and diagnose Go processes currently running on your system
A tool to list and diagnose Go processes currently running on your system - google/gops
Note #41: Поиск по исходному коду Go 🏄♂️
Итак что умеет
💥Поиск числа 255 в разных системах счисления (0b1111_1111, 0377, 0o377, 255, 0xff) во всех *.go файлах в текущей директории:
💥Поиск по всем комментариям, которые содержат слово
💥Поиск по всем ключевым словам, в частности по ifaм:
Болеше инфы как обычно в help. Have fun!
P.S. Также рекомендую познакомиться с аналогами
Useful links:
https://github.com/MichaelTJones/gg
https://github.com/BurntSushi/ripgrep
https://github.com/monochromegane/the_platinum_searcher
https://github.com/ggreer/the_silver_searcher
gg
- еще один аналог старичка grep
, который сужает поиск только: по ключевым словам, комментариям, и различным литералам.Итак что умеет
gg
:💥Поиск числа 255 в разных системах счисления (0b1111_1111, 0377, 0o377, 255, 0xff) во всех *.go файлах в текущей директории:
gg v 255 .
💥Поиск по всем комментариям, которые содержат слово
case
и игнорирует конструкцию switch case
:gg c case .
💥Поиск по всем ключевым словам, в частности по ifaм:
gg k if .
Болеше инфы как обычно в help. Have fun!
P.S. Также рекомендую познакомиться с аналогами
grep
заточенных под разработчиков: ripgrep
(Rust), pt
(platinum searcher) или ag
(silver searcher) и ack
eсли вы еще не слышали о них.Useful links:
https://github.com/MichaelTJones/gg
https://github.com/BurntSushi/ripgrep
https://github.com/monochromegane/the_platinum_searcher
https://github.com/ggreer/the_silver_searcher
Note #42 Proposal: Scaling the Go page allocator
Пока мы все читали пропозалы про Go2, ошибки и дженерики ребята написали предложение, о том чтобы потюнить Go runtime page аллокатор, который содержит серьезные проблемы с маштабирование при высоких hit rate аллокациях и большом GOMAXPROCS=32.
Заметили проблему в kubernetes/kubernetes/issues/75833 и в issue golang/go/28479 (runtime: make([]byte, n) becomes much slower compared with go 1.11.1)
В общем все детали в достаточно объемном документе:
https://go.googlesource.com/proposal/+/refs/changes/57/202857/2/design/35112-scaling-the-page-allocator.md
Оригинальный issue: https://github.com/golang/go/issues/35112
P.S. Thanks @o8tomat8o за ссылку.
Пока мы все читали пропозалы про Go2, ошибки и дженерики ребята написали предложение, о том чтобы потюнить Go runtime page аллокатор, который содержит серьезные проблемы с маштабирование при высоких hit rate аллокациях и большом GOMAXPROCS=32.
Заметили проблему в kubernetes/kubernetes/issues/75833 и в issue golang/go/28479 (runtime: make([]byte, n) becomes much slower compared with go 1.11.1)
В общем все детали в достаточно объемном документе:
https://go.googlesource.com/proposal/+/refs/changes/57/202857/2/design/35112-scaling-the-page-allocator.md
Оригинальный issue: https://github.com/golang/go/issues/35112
P.S. Thanks @o8tomat8o за ссылку.
Note #43: Слайды моего доклада с Kyiv Go Meetup October 2019 🎃
В этом докладе я рассказываю как писать удобные для пользователя консольные комманды, которые легко тестировать.
Сcылка на слайды 👇
https://www.slideshare.net/ssuserb92f8d/building-robust-and-friendly-command-line-applications-in-go
Видео: 👇
https://youtu.be/4AdN5q_SSbs?t=21
References:
📹 justforfunc #5: Defining a Color Flag in Go
📹 justforfunc #32: CLI tools with Cobra
📹 GopherCon 2019: Carolyn Van Slyck - Design Command-Line Tools People Love
📖 The Go Programming Language by Alan A. A. Donovan, Brian W. Kernighan
📖 Go in Practice by Matt Butcher, Matt Farina
P.S. Вопросы можно задавать в личку или чатик.
В этом докладе я рассказываю как писать удобные для пользователя консольные комманды, которые легко тестировать.
Сcылка на слайды 👇
https://www.slideshare.net/ssuserb92f8d/building-robust-and-friendly-command-line-applications-in-go
Видео: 👇
https://youtu.be/4AdN5q_SSbs?t=21
References:
📹 justforfunc #5: Defining a Color Flag in Go
📹 justforfunc #32: CLI tools with Cobra
📹 GopherCon 2019: Carolyn Van Slyck - Design Command-Line Tools People Love
📖 The Go Programming Language by Alan A. A. Donovan, Brian W. Kernighan
📖 Go in Practice by Matt Butcher, Matt Farina
P.S. Вопросы можно задавать в личку или чатик.
SlideShare
Building robust and friendly command line applications in go
Building robust and friendly command line applications in go - Download as a PDF or view online for free
Note #44: Golang security checker 👮♂️
Нашел тул, который помогает сканировать кодовую базу на различные секьюрити уязвимости:
- хардкодед явки и пароли
- байндинг на все сетевые интерфейсы (0.0.0.0:8001)
- поиск unsafe блоков кода
- конкатинация строк в SQL запросах
- не верные права на при создании фолдера
Больше инфы в доках [1] и сорс коде [2]
Links:
- [1] https://securego.io/
- [2] https://github.com/securego/gosec
P.S. даже есть свой slack: http://securego.herokuapp.com/ :)
Нашел тул, который помогает сканировать кодовую базу на различные секьюрити уязвимости:
- хардкодед явки и пароли
- байндинг на все сетевые интерфейсы (0.0.0.0:8001)
- поиск unsafe блоков кода
- конкатинация строк в SQL запросах
- не верные права на при создании фолдера
Больше инфы в доках [1] и сорс коде [2]
Links:
- [1] https://securego.io/
- [2] https://github.com/securego/gosec
P.S. даже есть свой slack: http://securego.herokuapp.com/ :)
Note 45: Go Конференции, которые нас ожидают в 2020 году 🔊
Продолжается набор заявок на доклады на FOSDEM 2020 (Go dev room), которая пройдет 1-2 февраля 2020 года, как обычно в Брюсселе. 🇧🇪
Как стало известно dotGo будет в марте 2020 в Париже 🇫🇷.
23-25 Апреля в Берлине, пройдет GoperCon Europe 2020 🇩🇪.
GopherCon в этому будет в Walt Disney World Dolphin Resort в 2020 году. Расположен в Орландо, штат Флорида. Стоит забукать в свои календари на 22-25 июня, чтобы испытать волшебство Диснея 😋🇺🇸.
To be continued...
Links:
[1] CFP Go devroom https://medium.com/@maartjeme/go-devroom-cfp-fosdem-2020-7615f2ed390
[2] dotGo https://www.dotgo.eu/
[3] https://twitter.com/gopherconeu
[4] https://twitter.com/gophercon
Продолжается набор заявок на доклады на FOSDEM 2020 (Go dev room), которая пройдет 1-2 февраля 2020 года, как обычно в Брюсселе. 🇧🇪
Как стало известно dotGo будет в марте 2020 в Париже 🇫🇷.
23-25 Апреля в Берлине, пройдет GoperCon Europe 2020 🇩🇪.
GopherCon в этому будет в Walt Disney World Dolphin Resort в 2020 году. Расположен в Орландо, штат Флорида. Стоит забукать в свои календари на 22-25 июня, чтобы испытать волшебство Диснея 😋🇺🇸.
To be continued...
Links:
[1] CFP Go devroom https://medium.com/@maartjeme/go-devroom-cfp-fosdem-2020-7615f2ed390
[2] dotGo https://www.dotgo.eu/
[3] https://twitter.com/gopherconeu
[4] https://twitter.com/gophercon
Note #46: Методы оценки безопасности для проектов Go 👮♂️
Ребята который проводили аудит безопасности k8s этим летом, опубликовали интересную статью о методах оценки безопасности в Go проектах [1]:
В статье говорится о:
- Статическом анализе (gosec, go-vet, and staticcheck, ineffassign, errcheck), кстати, о gosec я писал недавно https://yangx.top/golang_for_two/70);
- динамическом анализе: фаззинг, property testing (leanovate/gopter)
- кратко о codecoverage ( от себя добавлю визуализация codecov с помощью coveralls/codecov.io очень помогает)
и еще много полезностей 👇
https://blog.trailofbits.com/2019/11/07/attacking-go-vr-ttps/
Ребята который проводили аудит безопасности k8s этим летом, опубликовали интересную статью о методах оценки безопасности в Go проектах [1]:
В статье говорится о:
- Статическом анализе (gosec, go-vet, and staticcheck, ineffassign, errcheck), кстати, о gosec я писал недавно https://yangx.top/golang_for_two/70);
- динамическом анализе: фаззинг, property testing (leanovate/gopter)
- кратко о codecoverage ( от себя добавлю визуализация codecov с помощью coveralls/codecov.io очень помогает)
и еще много полезностей 👇
https://blog.trailofbits.com/2019/11/07/attacking-go-vr-ttps/
Telegram
Go на двоих
Note #44: Golang security checker 👮♂️
Нашел тул, который помогает сканировать кодовую базу на различные секьюрити уязвимости:
- хардкодед явки и пароли
- байндинг на все сетевые интерфейсы (0.0.0.0:8001)
- поиск unsafe блоков кода
- конкатинация строк…
Нашел тул, который помогает сканировать кодовую базу на различные секьюрити уязвимости:
- хардкодед явки и пароли
- байндинг на все сетевые интерфейсы (0.0.0.0:8001)
- поиск unsafe блоков кода
- конкатинация строк…
Note #48: Top 10 talks from Golab 2019 based on youtube stats 🎞 🇮🇹
Как многие[1][2] заметили, появились видео с последней конференции Golab, которая прошла в октябре в Италии.
По традиции top 10:
GoLab 2019 - Roberto Clapis - Day 1 Closing Talk: It starts with a problem (https://youtu.be/f6v3b4Rzb6E)
GoLab 2019 - Italo Vietro - Designing for failure (https://youtu.be/BOn3R41UrV8)
Golab 2019 - Hadas Yaakobovitch - Migrating a Mission Critical Service to Go (https://youtu.be/vUEKL8zekXc)
GoLab 2019 - Bill Kennedy - Keynote: You Want To Build a Web Service? (https://youtu.be/IV0wrVb31Pg)
GoLab 2019 - Giovanni Bajo - Conference presentation (https://youtu.be/SR-nJpoXyOE)
GoLab 2019 - Klaus Post - Taming Mutexes for Concurrency (https://youtu.be/fTEL4GxjWLM)
GoLab 2019 - Eleanor McHugh - Keynote: An Introduction To Functional Programming In Go (https://youtu.be/nxydu5aPtjQ)
GoLab 2019 - Federico Paolinelli - Rpc on steroids with Go and Grpc (https://youtu.be/2VW1_EHdb_o)
GoLab 2019 - Fabio Falzoi - An insight into Go Garbage Collection (https://youtu.be/etRF1Cpx5Ok)
GoLab 2019 - Florin Pățan - Using Go Modules in everyday life (https://youtu.be/8NcHdaETMZw)
Links:
- https://yangx.top/oleg_log/2312
- https://yangx.top/count0_digest/3215
Как многие[1][2] заметили, появились видео с последней конференции Golab, которая прошла в октябре в Италии.
По традиции top 10:
GoLab 2019 - Roberto Clapis - Day 1 Closing Talk: It starts with a problem (https://youtu.be/f6v3b4Rzb6E)
GoLab 2019 - Italo Vietro - Designing for failure (https://youtu.be/BOn3R41UrV8)
Golab 2019 - Hadas Yaakobovitch - Migrating a Mission Critical Service to Go (https://youtu.be/vUEKL8zekXc)
GoLab 2019 - Bill Kennedy - Keynote: You Want To Build a Web Service? (https://youtu.be/IV0wrVb31Pg)
GoLab 2019 - Giovanni Bajo - Conference presentation (https://youtu.be/SR-nJpoXyOE)
GoLab 2019 - Klaus Post - Taming Mutexes for Concurrency (https://youtu.be/fTEL4GxjWLM)
GoLab 2019 - Eleanor McHugh - Keynote: An Introduction To Functional Programming In Go (https://youtu.be/nxydu5aPtjQ)
GoLab 2019 - Federico Paolinelli - Rpc on steroids with Go and Grpc (https://youtu.be/2VW1_EHdb_o)
GoLab 2019 - Fabio Falzoi - An insight into Go Garbage Collection (https://youtu.be/etRF1Cpx5Ok)
GoLab 2019 - Florin Pățan - Using Go Modules in everyday life (https://youtu.be/8NcHdaETMZw)
Links:
- https://yangx.top/oleg_log/2312
- https://yangx.top/count0_digest/3215
Note #49: CockroachDB и Cockroach University 🔭
Cockroach Labs, которые написали CockroachDB (кто не в курсе БД написана на гошечке), недавно выпустили интересный проект под названием: Cockroach University, и там уже есть первый пилотный курс “Getting Started With CockroachDB”. Очень похоже по смыслу на MongoDB University и Neo4J сертификацию :)
Для любителей сертификатов и других ачивок, если набрать 70% процентов и выше то выдадут сертификат бесплатно! Кстати, курс длится около 6 часов.
https://university.cockroachlabs.com/catalog
Cockroach Labs, которые написали CockroachDB (кто не в курсе БД написана на гошечке), недавно выпустили интересный проект под названием: Cockroach University, и там уже есть первый пилотный курс “Getting Started With CockroachDB”. Очень похоже по смыслу на MongoDB University и Neo4J сертификацию :)
Для любителей сертификатов и других ачивок, если набрать 70% процентов и выше то выдадут сертификат бесплатно! Кстати, курс длится около 6 часов.
https://university.cockroachlabs.com/catalog
Note # 50 shhgit 😎
Очередной тул на Go - может искать пароли использую Github Events API в режиме приближенном к реальному времени.
https://github.com/eth0izzle/shhgit
Ну и дашбордик https://shhgit.darkport.co.uk/
😱 Это эпично наблюдать за тем как люди коммитят пароли прям вот сейчас :)
За ссылку спасибо setevoy!
Очередной тул на Go - может искать пароли использую Github Events API в режиме приближенном к реальному времени.
https://github.com/eth0izzle/shhgit
Ну и дашбордик https://shhgit.darkport.co.uk/
😱 Это эпично наблюдать за тем как люди коммитят пароли прям вот сейчас :)
За ссылку спасибо setevoy!
GitHub
GitHub - eth0izzle/shhgit: Ah shhgit! Find secrets in your code. Secrets detection for your GitHub, GitLab and Bitbucket repositories.
Ah shhgit! Find secrets in your code. Secrets detection for your GitHub, GitLab and Bitbucket repositories. - eth0izzle/shhgit
Note #51: errwrap
Аслан Фатих в твиттере порадовал новым тулом, который анализирует вызовы
Links:
- [1] https://github.com/fatih/errwrap
Аслан Фатих в твиттере порадовал новым тулом, который анализирует вызовы
fmt.Errorf()
и заменяет дерективы %s, которые можно заменить на новые %w
(начиная с go 1.13):$ errwrap -fix main.go
main.go:14:9: call could wrap the error with error-wrapping directive %w
diff --git a/main.go b/main.go
index 41d1c42..6cb42b8 100644
--- a/main.go
+++ b/main.go
@@ -11,5 +11,5 @@ func main() {
func foo() error {
err := errors.New("bar!")
- return fmt.Errorf("failed for %s with error: %s", "foo", err)
+ return fmt.Errorf("failed for %s with error: %w", "foo", err)
}
Links:
- [1] https://github.com/fatih/errwrap
Note #52: Top 10 talks of Gopherpalooza 2019
Вчера появились видео докладов с последней Gopherpalooza 2019, возглавил список Robert Griesemer 💪:
1. Go is 10! Now What?" by Robert Griesemer – Gopherpalooza 2019 (https://youtu.be/i0zzChzk8KE)
2. Building Scalable Microservices with Go" by Natalie Serebryakova – Gopherpalooza 2019 (https://youtu.be/u5O-YdA27yE)
3. Demystifying Context Values" by Jason Wentworth – Gopherpalooza 2019 (https://youtu.be/NxNT1-S-tKg)
4. Go is a Graph" by Francesc Campoy – Gopherpalooza 2019 (https://youtu.be/66qpLGeXd4c)
5. Intro to AI for software engineers Using go-learn" by Miriah Peterson – Gopherpalooza 2019 (https://youtu.be/T0DVu1Ehl5Q)
6. Parsing Expression Grammars (PEG)" by Tim Raymond – Gopherpalooza 2019 (https://youtu.be/a37rQdV7LE4)
7. Write Once, Compile Lots, Run Anywhere" by James Bowes – Gopherpalooza 2019 (https://youtu.be/m_6quA_jYYY)
8. Discovery of Worst Case Go Sort Inputs" by Jack Lindamood – Gopherpalooza 2019 (https://youtu.be/VAsX3og5wPI)
Приятного просмотра! 📺
Вчера появились видео докладов с последней Gopherpalooza 2019, возглавил список Robert Griesemer 💪:
1. Go is 10! Now What?" by Robert Griesemer – Gopherpalooza 2019 (https://youtu.be/i0zzChzk8KE)
2. Building Scalable Microservices with Go" by Natalie Serebryakova – Gopherpalooza 2019 (https://youtu.be/u5O-YdA27yE)
3. Demystifying Context Values" by Jason Wentworth – Gopherpalooza 2019 (https://youtu.be/NxNT1-S-tKg)
4. Go is a Graph" by Francesc Campoy – Gopherpalooza 2019 (https://youtu.be/66qpLGeXd4c)
5. Intro to AI for software engineers Using go-learn" by Miriah Peterson – Gopherpalooza 2019 (https://youtu.be/T0DVu1Ehl5Q)
6. Parsing Expression Grammars (PEG)" by Tim Raymond – Gopherpalooza 2019 (https://youtu.be/a37rQdV7LE4)
7. Write Once, Compile Lots, Run Anywhere" by James Bowes – Gopherpalooza 2019 (https://youtu.be/m_6quA_jYYY)
8. Discovery of Worst Case Go Sort Inputs" by Jack Lindamood – Gopherpalooza 2019 (https://youtu.be/VAsX3og5wPI)
Приятного просмотра! 📺
Note #53: TIL dockerexec
Daniel Martí порадовал утилитой для запуска тестов внутри докера [1] 👌
tl;dr
Под капотом это просто обертка над
Также можно использовать и другие флаги докера:
P.S. Ожидается, что у вас установлен docker ;)
Links:
[1] https://github.com/mvdan/dockexec
Daniel Martí порадовал утилитой для запуска тестов внутри докера [1] 👌
tl;dr
go get mvdan.cc/dockexec
go test -exec='dockexec postgres:12.1'
Под капотом это просто обертка над
cmd := exec.Command("docker", allDockerArgs...)
и установленный test бинарь как —entrypoint
и —workdir
в текущую директорию.Также можно использовать и другие флаги докера:
go test -exec='dockexec [docker flags] image:tag' [test flags]
P.S. Ожидается, что у вас установлен docker ;)
Links:
[1] https://github.com/mvdan/dockexec
Note #54: Обфускация Go
И снова Daniel Martí за выходные выкатил проект, который создает бинарь, содержащий минимальное возможное кол-во информации об исходном коде из которого он был собран.
Что происходит внутри:
- удаляет дебаг информацию (DWARF);
- удаляет BuildInfo;
- заменяет полезные идентификаторы с помощью base64 кодировки
- и тд
Больше можно 👁 в исходном коде -> [1]
Links:
- [1] https://github.com/mvdan/garble
И снова Daniel Martí за выходные выкатил проект, который создает бинарь, содержащий минимальное возможное кол-во информации об исходном коде из которого он был собран.
Что происходит внутри:
- удаляет дебаг информацию (DWARF);
- удаляет BuildInfo;
- заменяет полезные идентификаторы с помощью base64 кодировки
- и тд
Больше можно 👁 в исходном коде -> [1]
Links:
- [1] https://github.com/mvdan/garble
Note #55: Пазлы для настоящего Гофера от Dave Cheney
Дэйв выкатил обновленные слайды c блиц вопросами к 10 летию Go 🎉.
Итак есть несколько простых правил:
- нужно не более 2 гоферов одновременно;
- играем до первого правильного ответа;
- играем пока не закончатся Гоферы или вопросы :)
Поехали -> 🚘
[1] https://talks.godoc.org/github.com/davecheney/presentations/gopher-puzzlers.slide#1
Дэйв выкатил обновленные слайды c блиц вопросами к 10 летию Go 🎉.
Итак есть несколько простых правил:
- нужно не более 2 гоферов одновременно;
- играем до первого правильного ответа;
- играем пока не закончатся Гоферы или вопросы :)
Поехали -> 🚘
[1] https://talks.godoc.org/github.com/davecheney/presentations/gopher-puzzlers.slide#1
Note #56: FOSDEM 2020
Если вы вдруг решили тоже поехать на FOSDEM 2020 и загляните в Go dev room, то сможете встретить там меня с докладом ;) Буду рад пообщаться лично!
А для тех кто решил остаться дома, постараюсь собрать как можно больше годноты и запостить в канал.
P.S. На всякий случай что такое FOSDEM и какие ещё есть аудитории, с докладами и расписание go dev room:
https://fosdem.org/2020/schedule/track/go/
Если вы вдруг решили тоже поехать на FOSDEM 2020 и загляните в Go dev room, то сможете встретить там меня с докладом ;) Буду рад пообщаться лично!
А для тех кто решил остаться дома, постараюсь собрать как можно больше годноты и запостить в канал.
P.S. На всякий случай что такое FOSDEM и какие ещё есть аудитории, с докладами и расписание go dev room:
https://fosdem.org/2020/schedule/track/go/
archive.fosdem.org
FOSDEM 2020 - Go devroom