str := "text some text ${example_text}"
Найти надо подстроку, заключенную в
${ }
. И потом эту подстроку вместе с окружающими символами заменить.В пакете
regexp
есть метод Regexp.ReplaceAllStringFunc
Этот метод заменяет все вхождения строк, удовлетворяющих регулярному выражению, на результат работы функции подстановки. Функция получает на вход подстроку и по ней вычисляет замену.
Можно использовать такое регулярное выражение
// Регулярное выражение для поиска строк вида
// 'начинается с ${, затем любые символы кроме { и }
// в любом количестве, заканчивается }'
re := regexp.MustCompile(`\${[^{}]*}`)
В качестве функции замены предлагаю написать функцию, которая извлекает из найденной подстроки имя переменной и ищет соответствующее значение в таблице переменных
// Таблица значений переменных
varTable := map[string]string{
"some_var": "значение переменной some_var",
"another_var": "значение ещё одной переменной",
}
// Функция замены, подставляет значение переменной из таблицы varTable
substitutor := func(match string) string {
// match - значение вида `${var_name}`
// сначала извлечём var_name
varName := match[2 : len(match)-1]
// Теперь получим значение из таблицы
value, ok := varTable[varName]
if !ok {
// один из вариантов обработки отсутствующего значения - вернуть пустую строку
value = ""
}
return value
}
Обработка строки:
// Заменяем все подстроки, соответствующие регулярному выражению
result := re.ReplaceAllStringFunc(str, substitutor)
очень удобный сайт regex101.com для составления regex, use it
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤6🔥2
https://go.dev/blog/execution-traces-2024
В блоге освещаются несколько ключевых улучшений в трассировке выполнения Go, основанных на пакете runtime/trace.
Вот краткое описание:
- До версии Go 1.21 затраты времени выполнения на трассировку составляли где-то между 10-20% ресурсов процессора для многих приложений, что ограничивает трассировку ситуационным использованием, а не непрерывным, как при профилировании процессора. Сейчас она снизилась до 1-2% для некоторых приложений.
- Фундаментальный способ реализации трассировки был изменен в Go 1.22. Вы можете прочитать об изменениях в проектной документации здесь: https://github.com/golang/proposal/blob/master/design/60773-execution-tracer-overhaul.md
- в /x/exp/trace появилась новая экспериментальная функция, которая позволяет вам отслеживать запросы, которые занимают много времени, чтобы вы могли изучить их позже. Это отличное дополнение, поскольку ранее нам, приходилось включать трассировку и "ждать" выполнения запросов.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍4❤2😁1
Хмм, в Go легковесные потоки даже называются по-другому — горутины, в отличие от корутин в других языках.
Давайте сравним их и обсудим отличия.
Во-первых, сравнивать горутины и корутины - это как сравнивать горячее с высоким. Они предназначены для разных задач и спроектированы по-разному.
co_yield
и co_return
создают значения, co_await
получает значение. В каком-то смысле это старый недобрый setjmp
/longjmp
с поддержкой хранилища локальных переменных от компилятора.yield
, ни await
. Нужно явным образом организовывать передачу данных из горутины через каналы.Я не буду разводить флейм на тему, что лучше - асинхронные алгоритмы с
yield
/wait
или легковесные потоки с каналами. Лично я препочитаю потоки/горутины, потому что мне проще думать в стиле обмена данными между акторами, а не нарезки функциональности на асинхронную лапшу.Вот такие дела ¯\_(ツ)_/¯
#junior
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40❤9🔥7👎3
Пакет Go, который предоставляет функционал для проверки сертификатов
SSL/TLS
на наличие вредоносных подключений.▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤3🔥2
Годное видео, в котором описывается, что же делать с Dependency Injection в Go.
Очень актуально для проектов с большим количеством зависимостей.
Wire — библиотека для разрешения зависимостей в Go.
Работает на основе кодогенерации, а не рефлексии, что плюс к производительности.
Автор объясняет, как инициализировать базу данных через Wire, и как это может помочь избежать ошибок.
Он также обсуждает, как можно возвращать ошибки и деконструкторы.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍12👎9🔥2
Цель этой библиотеки - предоставить простой, и беспроблемный способ запуска конвейеров машинного обучения Hugging face в ваших приложениях Go.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3❤2
Одна из интересных особенностей Go – это использование комментариев для управления компиляцией. Например, вот такая директива:
// +build !amd64
— это "обычный" комментарий в исходном коде, но его читает препроцессор и использует указание
+build
для того, чтобы определить платформу (всё, что не amd64
)Это, конечно, не какой-то там особенный и исключительный случай использования комментариев: вспомните что-нибудь типа
#!/usr/bin/perl
. Тем не менее, ситуация, когда содержание комментария непосредственно влияет на процесс сборки, всё же выглядит необычно.@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14👎9❤4🔥2🤯1
Разбираются такие штуки, как:
— Работа с
env
— Нюансы работы с командной строкой
— Работа с указателями
— Структуры
— Использование
defer
— ...и много всего ещё
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31❤5🔥4
Давайте разберём такой супер-прикладной вопрос.
python-telegram-bot
называется ConversationHandler
'ы. Они уже реализованы как дополнение к пакету: https://github.com/and3rson/telemux?tab=readme-ov-fileВыглядеть будет примерно так:
mux := tm.NewMux().
AddHandler(tm.NewCommandHandler(
"start",
func(u *tm.Update) {
bot.Send(tgbotapi.NewMessage(u.Message.Chat.ID, "Hello! Say something. :)"))
},
)).
AddHandler(tm.NewHandler(
tm.Any(),
func(u *tm.Update) {
bot.Send(tgbotapi.NewMessage(u.Message.Chat.ID, "You said: "+u.Message.Text))
},
))
— Соотносишь команду с хендлером
— Хендлеры заносишь в мапу по ключу команды
— При получении команды от пользователя проверяешь ее наличие в мапе и вызываешь метод хендлера, в который можешь передать ответ и обработать как тебе нужно
Как-то так ¯\_(ツ)_/¯
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤6🔥5
Проект, который предоставляет быстрый и простой способ создания каркаса http-сервера Go.
Технический стек, включенный в это проект, включает Go, HTML, Temple и Tailwind.
git clone https://github.com/phillip-england/templ-quickstart <target-directory>
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤4🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Разработчикам, использующим пакет, придется вводить его имя каждый раз, когда они вызывают функцию из этого пакета. (Вспомните
fmt.Printf
, fmt.Println
, fmt.Print
и т. д.) Чтобы не возникало проблем, при выборе имен пакетов следует соблюдать несколько правил:
fmt
).strconv
).(Например, если бы пакет
fmt
назывался format
, то импорт этого пакета создавал бы риск конфликта с локальной переменной format
)@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤7🔥4😢1
Библиотека Go для создания WhatsApp ботов для нескольких устройств.
▪Github
▪Docs
#golang
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4❤3
Библиотека для управление логами, которая работает немного эффективнее, чем Splunk .
Разработчикам приходится перебирать различные инструменты для ведения журналов, метрик, трассировок
Splunk, DataDog, New Relic стоят дорого 💸 💸 💸
ElasticSearch требует много машин, обслуживание кластера несет сложности 👩 💻 👩 💻
Grafana Loki имеет низкую производительность запросов 🐌 🐌
Всего оддин двоичный файл, который вы можете запустить на своем ноутбуке и обрабатывать 8 ТБАЙТ в день.
▪Поддерживает: Open Telemetry, Elastic, Splunk HEC, Loki
▪Поддерживает несколько языков запросов: Splunk SPL, SQL и Loki LogQL
▪Простая архитектура,
▪Легко начать работу.
🔗 GIthub
🔗 Docs
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥40👍5❤4🥰1
Было опрошено 500 Go-разработчиков
Опрос затрагивает многие интересные вопросы:
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3🔥2🎉1