Forwarded from defer panic
Мне было сегодня лет, когда я узнал, что в GoLand встроен плейграунд, и больше не нужно идти в браузер, чтобы проверить какой-то маленький кусок кода. Он умеет как выполнять локально, так и загружать код на официальный плейграунд, после чего можно поделиться ссылкой. Но пожалуй самое крутое — внутри встроенного плейграунда можно использовать все те же фичи, что в обычном режиме, включая дебаг, Copilot и т.д.!
Чтобы открыть, нажимаете два раза Shift или вызываете «поиск по всему», вводите “playground”, вы прекрасны!
https://www.jetbrains.com/go/guide/tips/integrated-go-playground/
❤️ • ютуб • бусти • патреон • платный канал
Чтобы открыть, нажимаете два раза Shift или вызываете «поиск по всему», вводите “playground”, вы прекрасны!
https://www.jetbrains.com/go/guide/tips/integrated-go-playground/
Please open Telegram to view this post
VIEW IN TELEGRAM
Golang Дайджест
Мне было сегодня лет, когда я узнал, что в GoLand встроен плейграунд, и больше не нужно идти в браузер, чтобы проверить какой-то маленький кусок кода. Он умеет как выполнять локально, так и загружать код на официальный плейграунд, после чего можно поделиться…
Очень крутая фича, странно что я не знал о ней всё это время. Теперь сразу забиндил хоткей на неё.
Я редко пользовался плэйграундом в браузере, у меня просто всегда под рукой был проект - sandbox. Но для мелочей открывать отдельный проект лениво. Тем более, в этом плэйграунде я сразу заметил ещё одну интересную фичу - когда его открываешь, в нём по дефолту будет копия текущего открытого go-файла. То есть, можно быстро поиграться с кодом, не ломая при этом оригинальный файл.
Глвное - не пошэрить случайно рабочий код всеми миру 😁
Я редко пользовался плэйграундом в браузере, у меня просто всегда под рукой был проект - sandbox. Но для мелочей открывать отдельный проект лениво. Тем более, в этом плэйграунде я сразу заметил ещё одну интересную фичу - когда его открываешь, в нём по дефолту будет копия текущего открытого go-файла. То есть, можно быстро поиграться с кодом, не ломая при этом оригинальный файл.
Глвное - не пошэрить случайно рабочий код всеми миру 😁
Golang Дайджест pinned «💻 С чего начать изучать GoLang? - Ультимативный пост Оригинальный пост будет обновляться для сохранения актуальности. Репосты при этом не обновляются, поэтому не забывайте проверять оригинал. Must have, нестареющая классика: - A Tour of Go - ресурс, с которого…»
Третье издание книги "Golang для профи"
Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы, 3-е изд
Скажу честно, мне эта книга не очень зашла, но я знаю что многим она нравится. Поэтому делюсь этой новостью. Возможно, кто-то ждал обновлённое издание.
UPD: Статья с обзорм новой книги на хабре
————
Это не реклама, но всё же поделюсь мелкими плюшками при покупке книги на сайте издательства. Информацию взял из их почтовой рассылки:
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Скидка 25% по купону —
Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы, 3-е изд
Скажу честно, мне эта книга не очень зашла, но я знаю что многим она нравится. Поэтому делюсь этой новостью. Возможно, кто-то ждал обновлённое издание.
UPD: Статья с обзорм новой книги на хабре
————
Это не реклама, но всё же поделюсь мелкими плюшками при покупке книги на сайте издательства. Информацию взял из их почтовой рассылки:
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Скидка 25% по купону —
Golang
#bookwww.piter.com
Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы, 3-е изд.
Фундаментальное руководство по известному высокопроизводительному языку программирования Go (Golang).
Fixing For Loops in Go 1.22
https://go.dev/blog/loopvar-preview
David Chase и Russ Cox в официальном блоге Go рассказывают про проблему LoopVar (переменной цикла) и приводят конкретные примеры, в том числе из реального кейса проекта - Lets Encrypt.
Затем рассказывают, как именно эта проблема решается. Если кратко:
> change for loops to make these variables have per-iteration scope instead of per-loop scope
Как вы помните, эта фича уже есть в Go v1.21, но её нужно включить:
#go_1_22 #go_official
https://go.dev/blog/loopvar-preview
David Chase и Russ Cox в официальном блоге Go рассказывают про проблему LoopVar (переменной цикла) и приводят конкретные примеры, в том числе из реального кейса проекта - Lets Encrypt.
Затем рассказывают, как именно эта проблема решается. Если кратко:
> change for loops to make these variables have per-iteration scope instead of per-loop scope
Как вы помните, эта фича уже есть в Go v1.21, но её нужно включить:
GOEXPERIMENT=loopvar go test
А в версии 1.22 она уже будет работать по-умолчанию#go_1_22 #go_official
go.dev
Fixing For Loops in Go 1.22 - The Go Programming Language
Go 1.21 shipped a preview of a change in Go 1.22 to make for loops less error-prone.
Golang Дайджест
Fixing For Loops in Go 1.22 https://go.dev/blog/loopvar-preview David Chase и Russ Cox в официальном блоге Go рассказывают про проблему LoopVar (переменной цикла) и приводят конкретные примеры, в том числе из реального кейса проекта - Lets Encrypt. Затем…
Хабр
В Go меняется фундаментальная вещь — цикл
Если раньше в циклах были проблемы с замыканиями , так как переменная цикла имела скоуп всего цикла, а не одной его итерации, то в 1.22 это поведение поменяют . проще показать на примере: funcs :=...
Forwarded from quasilyte senpai
Я думал, что sparse map из статьи Расса Кокса - это очень крутая альтернатива маленькой мапе.
Эта реализация используется, например, внутри компилятора Go и ещё разок в паре stdlib пакетов.
Но пока занимался своими геймдев-задачами, натолкнулся на то, что get и set у этого sparse map довольно медленные. Из-за чего преимущество быстрого reset иногда перекрывались.
То есть: что банальный слайс, что sparse map, давали +/- одинаковое время исполнения. В одном случае reset занимал больше времени, а в другом - время исполнения росло из-за более дорогих get+set.
А вот штука, описанная в статье, умеет и в мгновенный reset, и в более эффективные get+set:
https://quasilyte.dev/blog/post/gen-map/
Может, вы тоже придумаете, где вам это может быть полезно.
Эта реализация используется, например, внутри компилятора Go и ещё разок в паре stdlib пакетов.
Но пока занимался своими геймдев-задачами, натолкнулся на то, что get и set у этого sparse map довольно медленные. Из-за чего преимущество быстрого reset иногда перекрывались.
То есть: что банальный слайс, что sparse map, давали +/- одинаковое время исполнения. В одном случае reset занимал больше времени, а в другом - время исполнения росло из-за более дорогих get+set.
А вот штука, описанная в статье, умеет и в мгновенный reset, и в более эффективные get+set:
https://quasilyte.dev/blog/post/gen-map/
Может, вы тоже придумаете, где вам это может быть полезно.
Golang Дайджест
Я думал, что sparse map из статьи Расса Кокса - это очень крутая альтернатива маленькой мапе. Эта реализация используется, например, внутри компилятора Go и ещё разок в паре stdlib пакетов. Но пока занимался своими геймдев-задачами, натолкнулся на то, что…
Пост Искандера Шарипова из чата сообщества Геймдева на Go
https://t.me/go_gamedev
Я решил, что вам тоже может быть интересно
https://t.me/go_gamedev
Я решил, что вам тоже может быть интересно
Битва за производительность: SparseMap vs GenerationsMap
https://habr.com/ru/articles/762984/
Новая статья от Искандера Шарипова про SparseMap, в продолжение темы предыдущих постов
Вкратце, о чем пойдет речь:
- используем слайс как `map[uint16]T
- приходим к тому, что такой слайс дорого очищать даже с новым clear()
- вспоминаем как устроен sparse map, взяв реализацию из исходников самого Go (там реализация по статье Расса Кокса)
- находим узкие места в этой sparse map реализации
- вводим свою новую структуру, которая для нашей задачи лучше во всех отношениях
#article #quasilyte
https://habr.com/ru/articles/762984/
Новая статья от Искандера Шарипова про SparseMap, в продолжение темы предыдущих постов
Вкратце, о чем пойдет речь:
- используем слайс как `map[uint16]T
- приходим к тому, что такой слайс дорого очищать даже с новым clear()
- вспоминаем как устроен sparse map, взяв реализацию из исходников самого Go (там реализация по статье Расса Кокса)
- находим узкие места в этой sparse map реализации
- вводим свою новую структуру, которая для нашей задачи лучше во всех отношениях
#article #quasilyte
Хабр
Битва за производительность: SparseMap vs GenerationsMap
Есть такая занимательная структура данных, описанная в статье Russ Cox — sparse map. Она используется, например, в недрах компилятора Go . А ещё в некоторых пакетах его стандартной библиотеки . У неё...
Forwarded from Библиотека Go-разработчика | Golang
⚡️Команда Go наконец-то представила свою позицию относительно организации модуля Go
Распространенный вопрос, который возникает у начинающих Go-разработчиков: «Как организовать проект?» с точки зрения расположения файлов и каталогов.
Цель документа — предоставить некоторые рекомендации, которые помогут ответить на этот вопрос. Чтобы максимально эффективно его использовать, убедитесь, что вы знакомы с основами модулей Go.
Распространенный вопрос, который возникает у начинающих Go-разработчиков: «Как организовать проект?» с точки зрения расположения файлов и каталогов.
Цель документа — предоставить некоторые рекомендации, которые помогут ответить на этот вопрос. Чтобы максимально эффективно его использовать, убедитесь, что вы знакомы с основами модулей Go.
Deconstructing Type Parameters
https://go.dev/blog/deconstructing-type-parameters
Интересный рассказ про type parameters на примере поэтапного написания собственной реализации функции
Полезно почитать для более глубокого понимания темы
#go_official
https://go.dev/blog/deconstructing-type-parameters
Интересный рассказ про type parameters на примере поэтапного написания собственной реализации функции
Clone[S ~[]E, E any](s S) S
Полезно почитать для более глубокого понимания темы
#go_official
go.dev
Deconstructing Type Parameters - The Go Programming Language
Why the function signatures in the slices packages are so complicated.
Как наличие тестов влияет на скорость разработки?
Имеется ввиду весь флоу разработки, т.е. Time to market. Это может быть примерная усреднённая оценка. Главное - основывайтесь на личном мнении и опыте.
Имеется ввиду весь флоу разработки, т.е. Time to market. Это может быть примерная усреднённая оценка. Главное - основывайтесь на личном мнении и опыте.
Anonymous Poll
18%
Точно ускоряет разработку
21%
Скорее ускоряет
5%
Не влияет на скорость
22%
Скорее замедляет
11%
Точно замедляет
23%
Не знаю / Посмотреть ответы
🚀 Mojo GoJo: Write Go with Emojis!
https://github.com/EdmondTabaku/mojo-gojo
Для поднятия настроения перед рабочим понедельником: утилита, позволяющая писать код на Go с использованием эмодзи.
Выглядит забавно, подумываю затащить это дело в продакшен на работе😄
————
Спасибо @Len4ez за ссылку
#joke #tool
https://github.com/EdmondTabaku/mojo-gojo
Для поднятия настроения перед рабочим понедельником: утилита, позволяющая писать код на Go с использованием эмодзи.
Выглядит забавно, подумываю затащить это дело в продакшен на работе
————
Спасибо @Len4ez за ссылку
#joke #tool
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Type Inference - подробный разбор
Everything You Always Wanted to Know About Type Inference - And a Little Bit More
Подробнейшая статья про Type Inference от Robert Griesemer в официальном блоге разработчиков Go.
Type inference — это механизм, при котором компилятор автоматически определяет тип переменной на основе того значения, которое ей присваивается.
В статье разбирается: зачем это нужно, как работает и различные нюансы.
#go_official
Everything You Always Wanted to Know About Type Inference - And a Little Bit More
Подробнейшая статья про Type Inference от Robert Griesemer в официальном блоге разработчиков Go.
Type inference — это механизм, при котором компилятор автоматически определяет тип переменной на основе того значения, которое ей присваивается.
В статье разбирается: зачем это нужно, как работает и различные нюансы.
#go_official
go.dev
Everything You Always Wanted to Know About Type Inference - And a Little Bit More - The Go Programming Language
A description of how type inference for Go works. Based on the GopherCon 2023 talk with the same title.
Golang Дайджест
Profile-guided optimization in Go 1.21 https://go.dev/blog/pgo Michael Pratt в статье в официальном блоге Go рассказывает про PGO - что это и как пользоваться. И самое интересное - он показывает конкретный пример оптимизации приложения. Полная документация…
Перевод этой статьи на Хабре: https://habr.com/ru/articles/766460/
Хабр
Profile-guided optimization в Go 1.21
В Go 1.20 была выпущена предварительная версия profile-guided optimization (PGO) , которую пользователи могли протестировать. После устранения известных ограничений в предварительной версии и...
Самый быстрый поиск пути на Go без аллокаций и СМС
https://habr.com/ru/articles/766882/
Искандер рассказывает про алгоритмы поиска пути: A-star и greedy BFS. Поиск пути понадобился при разработке игры Roboden - она написана на Go с использованием движка Ebitengine.
Эта статья не про алгоритмы, а про микрооптимизации, структуры данных и прочие хитрости. Мы будем ограничивать область нашей задачи, чтобы создавать лучшие решения конкретно под неё.
#article #quasilyte #gamedev
https://habr.com/ru/articles/766882/
Искандер рассказывает про алгоритмы поиска пути: A-star и greedy BFS. Поиск пути понадобился при разработке игры Roboden - она написана на Go с использованием движка Ebitengine.
Эта статья не про алгоритмы, а про микрооптимизации, структуры данных и прочие хитрости. Мы будем ограничивать область нашей задачи, чтобы создавать лучшие решения конкретно под неё.
#article #quasilyte #gamedev
Хабр
Самый быстрый поиск пути на Go без аллокаций и СМС
Алгоритмы важны. Но реализовать их можно очень по-разному. При одном и том же алгоритме, оптимизированная библиотека будет в тысячу раз быстрее наивной. Любите оптимизации, специализированные...
Прокачали логгер, теперь взялись за HTTP-роутер
https://eli.thegreenplace.net/2023/better-http-server-routing-in-go-122/
- Proposal
- Документация
Пример кода:
1. В первом хэнделере мы видим явное указание HTTP-метода (GET)
2. Во втором - компонент
За ссылку спасибо @batazor
#go_updates #http #mux
https://eli.thegreenplace.net/2023/better-http-server-routing-in-go-122/
- Proposal
- Документация
Пример кода:
package main
import (
"fmt"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("GET /path/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "got path\n")
})
mux.HandleFunc("/task/{id}/", func(w http.ResponseWriter, r *http.Request) {
id := r.PathValue("id")
fmt.Fprintf(w, "handling task with id=%v\n", id)
})
http.ListenAndServe("localhost:8090", mux)
}
1. В первом хэнделере мы видим явное указание HTTP-метода (GET)
2. Во втором - компонент
{id}
и r.PathValue("id")
для получения значенияЗа ссылку спасибо @batazor
#go_updates #http #mux
Используете ли вы глобальный логгер? Речь про рабочие проекты, серьезные пет-проекты и т.п.
И поделитесь в комментариях своим опытом - нравится ли вам такой подход? Почему?
И поделитесь в комментариях своим опытом - нравится ли вам такой подход? Почему?
Anonymous Poll
36%
Да, везде (или почти везде)
14%
Иногда
21%
Не использую
29%
Не знаю / Посмотреть ответы
Golang Дайджест
Прокачали логгер, теперь взялись за HTTP-роутер https://eli.thegreenplace.net/2023/better-http-server-routing-in-go-122/ - Proposal - Документация Пример кода: package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() …
Хабр
Улучшенная маршрутизация HTTP-серверов в Go 1.22
В Go 1.22 ожидается появление интересного предложения - расширение возможностей по поиску шаблонов (pattern-matching) в мультиплексоре, используемом по умолчанию для обслуживания HTTP в пакете...
Advanced gRPC Error Usage
https://jbrandhorst.com/post/grpc-errors/
Коротенькая статья о том, как с помощью пакета status добавлять произвольные метаданные к ошибкам. Это бывает очень удобно при разборе и обработке ошибок между сервисами.
Пример:
————
За ссылку спасибо @ekostogorov
#grpc #article
https://jbrandhorst.com/post/grpc-errors/
Коротенькая статья о том, как с помощью пакета status добавлять произвольные метаданные к ошибкам. Это бывает очень удобно при разборе и обработке ошибок между сервисами.
Пример:
st := status.New(codes.InvalidArgument, "invalid username")
desc := "The username must only contain alphanumeric characters"
v := &errdetails.BadRequest_FieldViolation{
Field: "username",
Description: desc,
}
br := &errdetails.BadRequest{}
br.FieldViolations = append(br.FieldViolations, v)
st, err := st.WithDetails(br)
if err != nil {
// If this errored, it will always error
// here, so better panic so we can figure
// out why than have this silently passing.
panic(fmt.Sprintf("Unexpected error attaching metadata: %v", err))
}
return st.Err()
————
За ссылку спасибо @ekostogorov
#grpc #article
Go Ahead
Advanced gRPC Error Usage
How to best handle errors in Go is a divisive issue, leading to opinion pieces by illustrious bloggers such as Dave Cheney, the commander himself Rob Pike as well as the official Go blog. I’m not going to tackle those opinions here, instead I’m going to talk…