В голове Айтишника
12 subscribers
412 photos
126 videos
13 files
774 links
Я пишу об информационных технологиях, бесплатном ПО с открытым исходным кодом и обо всем, что с этим связано.

Более 13 лет практического опыта в веб-разработке, UX-консалтинге, управлении проектами различной сложности.

Связаться 👉 https://shostak.dev
Download Telegram
🔥 A next-generation CLI tool for building amazing web apps in Go using htmx & hyperscript

This CLI tool can easily build amazing web applications with Go on the backend, using htmx & hyperscript and the most popular atomic/utility-first CSS frameworks on the frontend.

Features:

– 100% free and open source under the Apache 2.0 license;
– For any level of developer's knowledge and technical expertise;
– Well-documented, with a lot of tips and assists from the authors;
– Smart CLI that does most of the routine setup and preparation for production;
– Helps to get into the Go + htmx + hyperscript technology stack faster;
– The possibility of simply adding a ready-to-use and completely customized atomic/utility-first CSS framework to your project;
– Has a library of user-friendly helpers for your Go code;
– Contains a comprehensive example of how to use it out of the box.

GitHub repository: https://github.com/gowebly/gowebly
📖 Documentation: https://gowebly.org
📺 Demo video: https://www.youtube.com/watch?v=qazYscnLku4
📝 Introduction article: https://dev.to/koddr/a-next-generation-cli-tool-for-building-amazing-web-apps-in-go-using-htmx-hyperscript-336d

#go #htmx #webapps
Forwarded from Golang Дайджест
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
💡gRPC и Go на практике

🤩Вы, вероятно, слышали о gRPC, если еще не использовали её. Она особенно популярна для межсервисной связи благодаря своей эффективности, языковой независимости и встроенной поддержке таких вещей, как MTLS.

☝️Выше представлен простой пример начала работы с gRPC от Matt Boyle.

#go #tip
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from 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()
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
💡 Добавляем иконку для исполняемого файла Windows, созданного на Go:

1️⃣Готовим иконку

$ magick convert icon.png -define icon:auto-resize=256,128,64,48,32,16 icon.ico

$ convert icon_16.png icon_32.png icon_48.png icon_256.png -colors 256 icon.ico

2️⃣Создаем файлы .syso

$ go install github.com/akavel/rsrc@latest

$ rsrc -arch 386 -ico icon.ico
$ rsrc -arch amd64 -ico icon.ico

3️⃣Go автоматически выберет любой соответствующий файл .syso в каталоге пакета main и включит его в исполняемый файл, созданный для Windows

👉 Подробнее

#go #tip
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Big update: the Gowebly CLI now supports Templ

I've released a big update to the Gowebly CLI project in v1.5.0 which includes Templ support for built-in net/http and all Go web frameworks: Fiber, go-chi and echo.

https://dev.to/koddr/big-update-the-gowebly-cli-now-supports-templ-3gog

#go #gowebly #templ
В голове Айтишника
👩‍💻 Команда Charmbracelet представила простую и мощную библиотеку для создания интерактивных форм и подсказок в терминале под названием huh. 🤩 Создавайте формы и собирайте данные с помощью всего нескольких строк на Go. 👉 GitHub
❗️ Только нужно быть осторожным, выбирая huh, т.к. размер бинарника на выходе может вырасти в размере.

Я это уже "проверил" в своем сайд-проекте https://github.com/gowebly/gowebly в котором я перешёл на красивый TUI от huh, отказавшись от парсинга YAML-конфига через koanf.

Чтобы не быть голословным: RPM-пакет с Gowebly CLI v1.10.0 весил всего 2.12 MB, но уже v2.0.0 версия – выросла до 3.4 MB. И такая прогрессия по каждому таргету, для которого я делаю билд (macOS, Windows, различные GNU/Linux дистры).

А поменялся только сам факт конфигурирования CLI перед созданием нового проекта, так ещё и вырезано много строчек повторяющегося кода и редьюснуты gotmpl-шаблоны, использующиеся в генерации (которые эмбедится в бинарь).

Скорее всего, потому что huh много тянет из core-пакета bubbletea и lipgloss, чтобы быть таким красивым и функциональным. От этого ему и нужно больше включать в конечный бинарь... 🤔

Причём, не только моё, вот человек это же в ишьюсах huh пишет: https://github.com/charmbracelet/huh/issues/78

Окей, там уже пофиксили, но билд всё равно хорошо прибавляет в весе, если сравнивать с другими похожими Go-пакетами для TUI! Т.е. такая проблема есть даже после конкретного фикса.

Это всё не претензия, если что, просто интересное наблюдение и надежда на то, что будет лучше в будущих релизах! 😘

#go #gowebly #опытиспользования
🎉 The Gowebly CLI has grown to v2.0.0

While everyone was relaxing and thinking about Christmas, I was hard at work in my studio to prepare a massive update for the Gowebly CLI number v2.

👉 https://dev.to/koddr/the-gowebly-cli-has-grown-to-v200-d1c

#gowebly #go
Forwarded from Golang Дайджест
Go Tour на стероидах от ArdanLabs

https://www.ardanlabs.com/blog/2024/01/ultimate-go-tour.html

William Kennedy, известный нам по крутым гайдам по внутренностям Go, решил, что официальный Go Tour недостаточно хорош, и предлагает нам свою версию.

Что не нравилось:

- Официальный Тур не является всеобъемлющим как по количеству примеров, так и по содержанию, объясняющему эти примеры
- Содержание практически мгновенно переходит от новичка к эксперту

Вильям поколдовал и получилось это: tour.ardanlans.com
Лучше оно или хуже - решать вам. Но оно точно стоит внимания.

Возможно, один из самых крутых аспектов этого нового тура заключается в том, что он не контролируется Google. Это дает проекту гибкость, позволяющую вовлечь в него сообщество.

#ardanlabs #go_tour
🔥 We couldn't get past the updates that occurred in the new version of Go 1.22.0, so all the innovations for the net/http package have been leveraged in this release.

👉 https://github.com/gowebly/gowebly

#gowebly #go
🤓 My top 3 Go packages that I wish I'd known about earlier

Today, I'd like to travel back in time, find myself at the very beginning of planning my current project, and advise myself to familiarize myself with these wonderful Go packages…

Unfortunately, I can't do that! But I can introduce you to them. Here we go 👇

https://dev.to/koddr/my-top-3-go-packages-that-i-wish-id-known-about-earlier-3j10

#go #golang
🔥 Today, I've released the Gowebly CLI v2.4.0 which includes Preline UI components library support for the frontend.

📝 Article: https://dev.to/koddr/preline-ui-gowebly-cli--2928
GitHub: https://github.com/gowebly/gowebly

#go #golang #gowebly #preline #ui
⚡️ Gowebly CLI now supports the PocketBase framework

PocketBase is an open source ready-to-use framework/backend for your next SaaS and mobile application in a single file.

📝 https://dev.to/koddr/gowebly-cli-now-supports-the-pocketbase-framework-bi6

#go #golang #gowebly
Let's Go

Автор:
Alex Edwards
Год издания:
2022

#go #en

Скачать книгу
Forwarded from Golang Дайджест
Range Over Function Types

https://go.dev/blog/range-functions

Подробный пост в официальном блоге разработчиков Go о том, зачем добавили итераторы в Go 1.23, что они из себя представляют, как их использовать, приводят примеры.

#go_official
Forwarded from Golang Дайджест
unique - новый пакет в стандартной библиотеке Go 1.23

https://go.dev/blog/unique

Ещё один интересный пост в официальном блоге авторов Go с подробным объяснением очередной интересной новинки в версии 1.23

Пакет unique упрощает работу с дубликатами. То есть, он позволяет выполнять дедупликацию таким хитрым образом, чтобы все ссылки указывали на единственную, уникальную копию. При этом пакет эффективно управляет этими копиями под капотом.

Возможно, вы уже встречали этот подход под названием Interning.

Автор статьи рассказывает и показывает, как это работает, и почему это полезно.

#go_official #go_1_23
Forwarded from Go Update
🎉 Вышел Go 1.24! 🎉

Этот момент настал.

Ключевые нововведения:
— Дженерики теперь умеют в псевдонимы (aliases) т.е. теперь можно писать так


type MyType[T any] = myType[T,*T]


Поздравляю тех, кому приходилось работать с указателями в дженериках, теперь можно хоть нормальные сигнатуры наружу выставлять.

— Теперь можно отслеживать версии и использовать утилиты прямо с помощью команды go tool. Краткий смысл сего: оно помещает все зависимости добавляемой тулзы в require блок, а саму утилиту в блок tool. Учтите, что если вы не указываете отдельный go.mod файл с помощью флага -modfile (его принимают большинство команд) то зависимости внешней тулзы перемешаются с вашими. Однако есть и хорошая новость — из-за умного механизма «вычистки» MVS если кто то импортирует ваш модуль, то зависимости которые нужны для утилит к нему не попадут.

go test теперь гоняет go vet с небольшим числом анализаторов перед запуском тестов для поиска распространенных ошибок (в том числе ошибок в оформлении тестов). go vet тоже подтянули, теперь, например, ругается на printf функции где аргумент только строка.

— Бинари запущенные с помощью go run и go tool теперь кешируются внутри внутри билд кэша. Никаких больше пересборок на каждом go run.

go build и go install научили в json вывод.

— С помощью новой переменной окружения GOAUTH можно определить принцип для авторизации на приватных серверах модулей. Подробности с помощью go help goauth

go build теперь вставляет в бинарь информацию о версии (наконец-то можно перестать делать это вручную!) с использованием тега и/или хеша коммита вашего гита (или mercurial и прочая).

— Новая реализация map на основе Swiss Tables. Бигтехи ваши вопросы на собесах больше неактуальны 🤡.

— Инлайнинг стал мощнее. Теперь, с большей вероятностью, тело функции которую вы передаете как аргумент будет вставлено в место ее вызова. Делали в основном для итераторов которые уступали по скорости циклам. Вместе с прошлым изменением и прочими изменениями в рантайме дало совокупный буст в 3-5% по производительности.

— Различные улучшения CGO с помощью новых директив.

— Новый способ гонять бенчи for b.Loop() { ... }. Основной плюс (кроме того, что меньше писать) в том, что гонялке бенчмарков больше не нужно вызывать вашу функцию несколько раз, ибо сама найдет нужные параметры во время цикла. А значит дорогие блоки инициализации и удаления по итогу бенча стали дешевле.

— С помощью переменной окружения GOCACHEPROG можно настроить свое утилиту которое будет отвечать за кеширование, вместо стандартного «все на диск в папочку». Пригодиться тем, у кого распределенные билды или много чего собирается в докере. Документация.

— Пакет со слабыми указателями стал доступен всем.

— Подъехала замена финалайзерам. С типобезопастностью и сигнатурой которая намекает как делать правильно (и длинной докой объясняющей все сценарии). А еще их можно повесить сколько угодно в отличии от финалайзеров. Почему это важно я писал ранее.

— Пакет testing/synctest который в будущем позволит нам полностью дропнуть все моки времени. Пока обещают изменения API поэтому скрыто за флагом GOEXPERIMENT=synctest

— Появился OpenRoot. TLDR: открыв каталог таким образом из него нельзя убежать используя симлинки и прочая. Штука интересная для тех у кого пути до файлов генерируются извне.

— Куча прочих улучшений, включая новый функции для итераторов в пакеты bytes и strings.

— У тестов и бенчей появился свой контекст! Можно будет дропнуть кучу кода отвечающего за создание контекстов в тестах.

Полное описание (жирного) релиза вот тут.
This media is not supported in your browser
VIEW IN TELEGRAM
🎉 Обновил-таки наконец-то свой проект Gowebly до новой мажорной версии v3.0.0

Главное — это переход на новую версию Go 1.24 и поддержка Tailwind CSS версии 4.0 для всех фреймворков (daisyUI, Preline UI, Flowbite и ванильного тейлвинда, конечно же).

Также, удалил зависимость от спиннера из пакета charmbracelet/huh и немного причесал выдачу сообщений пользователю в рабочем процессе CLI.

Уже можно обновляться 👉 https://gowebly.org/

#go #gowebly #cli