🎥 Что посмотреть: как Go улучшает производительность компилятора TypeScript
Если вы хотите понять, как можно значительно ускорить работу компилятора и улучшить производительность на высоконагруженных задачах, это видео для вас.
Команда разработчиков TypeScript делится опытом переноса компилятора с использованием Go. Это позволяет сократить время компиляции в десятки раз и решает множество проблем с производительностью в JavaScript.
➡️ Смотреть видео
🐸 Библиотека Go разработчика #буст
Если вы хотите понять, как можно значительно ускорить работу компилятора и улучшить производительность на высоконагруженных задачах, это видео для вас.
Команда разработчиков TypeScript делится опытом переноса компилятора с использованием Go. Это позволяет сократить время компиляции в десятки раз и решает множество проблем с производительностью в JavaScript.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2👾2🔥1
Forwarded from Proglib.academy | IT-курсы
Можно ли стать разработчиком, если в школе ненавидел математику? А если наоборот — тащился от алгебры и геометрии, но кодить не умеешь? Эта статья раскладывает всё по полочкам: где без математики никуда, а где можно и без неё.
✓ Почему все считают, что программисты — математики
✓ В каких сферах разработки можно вообще не знать математику
✓ Где хватит готовых библиотек, а где придётся разбираться в формулах
✓ Какие области программирования требуют мощного математического бэкграунда
✓ Что делать, если математика — это боль, но хочется освоить ML или Data Science
✓ Топ книг, которые помогут понять и даже полюбить математику
Proglib Academy
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🤔2😢1👾1
🔥 Go и дженерики: спасение или катастрофа
Давайте поговорим о самой противоречивой фиче последних лет – дженериках.
Go 1.18 принес нам дженерики, и с тех пор сообщество разделилось на два лагеря:
➖ «Это было необходимо!» – наконец-то можно писать более чистый и переиспользуемый код. Ad-hoc-полиморфизм не всегда удобен, а interface{} и рефлексия – зло.
➖ «Go потерял свою простоту!» – дженерики убили лаконичность кода. Вместо понятного Go мы получили мини-Java.
💭 Согласны ли вы с тем, что дженерики спасли Go, или же это был шаг в сторону усложнения?
🐸 Библиотека Go разработчика #междусобойчик
Давайте поговорим о самой противоречивой фиче последних лет – дженериках.
Go 1.18 принес нам дженерики, и с тех пор сообщество разделилось на два лагеря:
💭 Согласны ли вы с тем, что дженерики спасли Go, или же это был шаг в сторону усложнения?
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱7
Подводим итоги всего, что случилось за эти 7 дней:
🎧 Новый выпуск подкаста Cup o' Go — обсуждаются релизы безопасности Go 1.24.1 и 1.23.7, обновление gopls v0.18.0, а также инициативы по переписыванию проектов на Go.
🐍 Релиз Viper v1.20.0 — улучшены API поиска файлов, добавлена поддержка привязки структур. Также прекращена поддержка Go 1.20, а устаревший slog shim удалён для упрощения кода.
🌚 Go 1.24 получил новый API — теперь разработчики могут задавать корневую директорию, ограничивая доступ приложения к файловой системе и повышая безопасность.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Собрали для вас парочку идей как необычно работать со слайсами:
s[i] = s[len(s)-1]
s = s[:len(s)-1]
n := 0
for _, x := range s {
if keep(x) {
s[n] = x
n++
}
}
s = s[:n]
if cap(s)-len(s) < n {
s = append(make([]int, 0, len(s)+n), s...)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23😁4👍2⚡1
Forwarded from Библиотека задач по Go | тесты, код, задания
👻 — int
🌚 — float32
⚡️ — float64
🎉 — double
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡215🌚15😁9🎉3👾3
🔑 Меньше запросов, больше скорости
Когда клиент запрашивает данные, сервер обычно играет роль посредника, проверяя права доступа и передавая данные. Но как можно ускорить этот процесс и разгрузить сервер.
➖ Valet Key Pattern
1️⃣ Клиент запрашивает доступ к ресурсу.
2️⃣ Сервер выдает временный токен («valet key») с ограниченными правами.
3️⃣ Клиент напрямую использует этот токен для доступа к данным
❓ Где используется
• Доступ к объектному хранилищу (AWS S3 Pre-Signed URLs, Azure SAS Tokens)
• Ограниченный доступ к API без полной аутентификации
• Стриминг медиафайлов с временными ссылками
➡️ Подробности про паттерн
🐸 Библиотека Go разработчика #буст
Когда клиент запрашивает данные, сервер обычно играет роль посредника, проверяя права доступа и передавая данные. Но как можно ускорить этот процесс и разгрузить сервер.
❓ Где используется
• Доступ к объектному хранилищу (AWS S3 Pre-Signed URLs, Azure SAS Tokens)
• Ограниченный доступ к API без полной аутентификации
• Стриминг медиафайлов с временными ссылками
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🐧 Пингвин, покоривший мир: история взлета Linux – ОС, управляющей 96% серверов
В 1991 году на компьютере с 4 мегабайтами памяти родилась программа, которая сегодня управляет большей частью интернета, смартфонами и даже космическими аппаратами. Это история Linux, рассказанная одним из первых свидетелей.
➡️ Читать статью
➡️ Зеркало
В 1991 году на компьютере с 4 мегабайтами памяти родилась программа, которая сегодня управляет большей частью интернета, смартфонами и даже космическими аппаратами. Это история Linux, рассказанная одним из первых свидетелей.
➡️ Читать статью
➡️ Зеркало
👍15❤3😁3
Media is too big
VIEW IN TELEGRAM
Proglib рассказывает базу в формате рилса
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱24👍8
📝 Интерактивная шпаргалка по GoLand
Все важные сочетания, которые помогут вам ускорить работу в IDE и сделать процесс разработки максимально комфортным.
Никаких сложных настроек — просто посмотрите, выберите нужные сочетания и используйте их в своей работе.
➡️ Изучить хоткеи
🐸 Библиотека Go разработчика #буст
Все важные сочетания, которые помогут вам ускорить работу в IDE и сделать процесс разработки максимально комфортным.
Никаких сложных настроек — просто посмотрите, выберите нужные сочетания и используйте их в своей работе.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21👏9👍4🥱2💯2
В нашем чате работает бот Shieldy — он защищает от спама, запрашивая у новых участников решение простой капчи.
⚠️ Проблема, с которой сталкиваются многие: вы нажимаете под постом «Прокомментировать», пишете что-то, а потом получаете бан и не можете писать комментарии.
❓Почему так: Shieldy отправляет капчу в сам чат, а не в комментарии под конкретный пост. Из-за этого капчу можно не увидеть, не отправить ответ на нее, и бот автоматически заблокирует вас.
— Зайдите в описание канала с телефона и нажмите кнопку Discuss / Чат
— Нажмите Join / Присоединиться
— Сразу обратите внимание на сообщение от бота Shieldy
— Решите простой пример и отправьте ответ в чат
После этого бот отправит приветственное сообщение и вы сможете оставлять комментарии. Эту проверку нужно пройти только один раз при вступлении в чат.
❗️ Если вас все-таки забанили
— Это временная блокировка на несколько минут
— Подождите и попробуйте зайти позже, бот снова отправит вам капчу
Админы канала никак не могут ускорить процесс, бот автоматически снимает с вас блокировку через пару минут. Мы понимаем, что эта система неидеальна, и ищем более удобное решение.
👾 Спасибо, что активно участвуете в обсуждении наших постов!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁1
⚙️ Как сделать select с таймаутом
Чтобы не ждать данные в select бесконечно нужно реализовать таймаут. В Go сделать это можно несколькими способами:
1️⃣ Использование
Подходит для простых случаев, но создает новую time.After при каждом вызове.
2️⃣ Использование
3️⃣ Использование
В отличие от time.After, NewTimer можно сбрасывать timer.Reset(duration), если нужно обновить таймаут.
4️⃣ Использование
Подходит для ожидания с периодической проверкой состояния.
5️⃣ Принудительное завершение через
Полезно, когда нужно дождаться завершения другой горутины, но не бесконечно.
Каждый из этих вариантов хорош в своей ситуации. Какой из них вам больше подходит?💬
🐸 Библиотека Go разработчика #буст
Чтобы не ждать данные в select бесконечно нужно реализовать таймаут. В Go сделать это можно несколькими способами:
time.After
Подходит для простых случаев, но создает новую time.After при каждом вызове.
select {
case msg := <-ch:
fmt.Println("Получено:", msg)
case <-time.After(2 * time.Second):
fmt.Println("Таймаут!")
}
context.WithTimeout
Можно передавать ctx в функции, что удобно для управления таймаутами в API-запросах или базах данных.ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case msg := <-ch:
fmt.Println("Получено:", msg)
case <-ctx.Done():
fmt.Println("Таймаут:", ctx.Err())
}
time.NewTimer
В отличие от time.After, NewTimer можно сбрасывать timer.Reset(duration), если нужно обновить таймаут.
timer := time.NewTimer(2 * time.Second)
defer timer.Stop()
select {
case msg := <-ch:
fmt.Println("Получено:", msg)
case <-timer.C:
fmt.Println("Таймаут!")
}
ticker
для периодического опроса с таймаутомПодходит для ожидания с периодической проверкой состояния.
ticker := time.NewTicker(500 * time.Millisecond)
defer ticker.Stop()
timeout := time.After(2 * time.Second)
for {
select {
case msg := <-ch:
fmt.Println("Получено:", msg)
return
case <-ticker.C:
fmt.Println("Ожидание...")
case <-timeout:
fmt.Println("Таймаут!")
return
}
}
select
с done
каналомПолезно, когда нужно дождаться завершения другой горутины, но не бесконечно.
done := make(chan struct{})
go func() {
time.Sleep(3 * time.Second)
close(done)
}()
select {
case msg := <-ch:
fmt.Println("Получено:", msg)
case <-done:
fmt.Println("Горутина завершена, но данных нет.")
case <-time.After(2 * time.Second):
fmt.Println("Таймаут!")
}
Каждый из этих вариантов хорош в своей ситуации. Какой из них вам больше подходит?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28⚡3👍3😁2
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
🧩💊 Алгоритмическая самоуспокоенность: как мы разучились думать своей головой
Каждый день мы сталкиваемся с бесконечным потоком информации, которая не просто наполняет наш день, а управляет нашими мыслями. Социальные сети, алгоритмы и вечная гонка за вниманием приводят к тому, что мы забываем, как думать собственной головой.
Это не просто влияет на настроение, но и на способность анализировать информацию, принимать решения и, главное, не становиться частью системы манипуляций.
Если вы хотите вернуться к осознанному подходу в восприятии мира и научиться фильтровать контент, то эта тема точно для вас.
🔗 Подробнее в статье
🐸 Библиотека джависта
Каждый день мы сталкиваемся с бесконечным потоком информации, которая не просто наполняет наш день, а управляет нашими мыслями. Социальные сети, алгоритмы и вечная гонка за вниманием приводят к тому, что мы забываем, как думать собственной головой.
Это не просто влияет на настроение, но и на способность анализировать информацию, принимать решения и, главное, не становиться частью системы манипуляций.
Если вы хотите вернуться к осознанному подходу в восприятии мира и научиться фильтровать контент, то эта тема точно для вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1😁1
📔 Промт дня: компилятор с объяснениями
Вы когда-нибудь задумывались, что делает Go-компилятор с вашим кодом на самом деле? Этот промт детально разберёт процесс компиляции, покажет шаги оптимизации и объяснит, почему финальный бинарник получился таким, а не иначе:
Какими промтами пользуетесь вы? Делитесь в комментариях👇
🐸 Библиотека Go разработчика #буст
Вы когда-нибудь задумывались, что делает Go-компилятор с вашим кодом на самом деле? Этот промт детально разберёт процесс компиляции, покажет шаги оптимизации и объяснит, почему финальный бинарник получился таким, а не иначе:
You are an expert Go compiler, known for your deep understanding of the Go programming language and your ability to efficiently compile Go code. Your goal is to take a given Go program and compile it, optimizing the output for performance and efficiency.
Here is the format you will use to compile the Go code and provide recommendations:
---
## Compilation Process
Describe the steps you would take to compile the provided Go code, including any optimizations or techniques you would use.
## Compiled Output
Provide the compiled output of the Go code, including any relevant information such as file size, execution time, or memory usage.
---
Какими промтами пользуетесь вы? Делитесь в комментариях👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🌚2
🚧 Неочевидные грабли в Go – когда всё кажется простым
Go прославился своей лаконичностью, прямолинейностью и минимализмом. Вы пишете код, компилируете – и вроде бы всё отлично. Но как часто случалось, что в простом коде прятались ловушки, которые потом отомстили в самый неподходящий момент?
Делитесь в комментариях своими историями о том, как вы наступали на неочевидные грабли в Go:
— Когда код, казалось бы, логичен и чист, вдруг начал вести себя странно.
— Ситуации, когда гонки данных или неправильное использование горутин приводили к неожиданным результатам.
— Казалось бы, безопасный map вдруг решил устроить вечеринку из-за отсутствия синхронизации.
Начнём с нашего админа:
🐸 Библиотека Go разработчика #междусобойчик
Go прославился своей лаконичностью, прямолинейностью и минимализмом. Вы пишете код, компилируете – и вроде бы всё отлично. Но как часто случалось, что в простом коде прятались ловушки, которые потом отомстили в самый неподходящий момент?
Делитесь в комментариях своими историями о том, как вы наступали на неочевидные грабли в Go:
— Когда код, казалось бы, логичен и чист, вдруг начал вести себя странно.
— Ситуации, когда гонки данных или неправильное использование горутин приводили к неожиданным результатам.
— Казалось бы, безопасный map вдруг решил устроить вечеринку из-за отсутствия синхронизации.
Начнём с нашего админа:
Завернул обработку запросов в горутину, тесты проходят, ошибок нет. Выкатываем в прод – а часть запросов просто исчезает. Долго разбирался, пока не осознал: главная функция завершалась раньше, чем отрабатывали горутины, и они просто не успевали исполниться.
Теперь всегда использую sync.WaitGroup
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13😁5
Чтобы наслаждаться отчётом о покрытии тестами, сделайте три простых шага:
1. Устанавливаем gocov и gocov-html:
go install github.com/axw/gocov/gocov@latest
go install github.com/matm/gocov-html@latest
2. Генерируем покрытие тестами:
go test -coverprofile=coverage.out ./...
3. Преобразуем в красивый отчёт:
gocov convert coverage.out | gocov-html > coverage.html
Теперь открываем coverage.html в браузере —
и видим, что покрыто, а что — нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥4❤1
Forwarded from Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
📉🤦 152 000 уволенных в IT за год: кому это помогло?
Корпоративная бензопила снова в деле: каждый месяц 2 миллиона американцев теряют работу из-за сокращений. Но действительно ли это помогает компаниям?
🔗 Читать статью
Корпоративная бензопила снова в деле: каждый месяц 2 миллиона американцев теряют работу из-за сокращений. Но действительно ли это помогает компаниям?
🔗 Читать статью
😁4❤1👍1😢1🥱1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18🤔3❤🔥2👍1