Forwarded from Библиотека программиста | программирование, кодинг, разработка
💡Шпаргалка по REST API для начинающих
📌 Шесть фундаментальных принципов, которые служат строительными блоками архитектуры REST API:
1️⃣ Клиент-серверная архитектура
2️⃣ Взаимодействие без сохранения состояния
3️⃣ Возможность кэширования
4️⃣ Многоуровневая система
5️⃣ Поддержка кода по требованию
6️⃣ Унифицированный интерфейс
👉 Читайте подробнее на Medium или в PDF (файл в комментариях)
📌 Шесть фундаментальных принципов, которые служат строительными блоками архитектуры REST API:
1️⃣ Клиент-серверная архитектура
2️⃣ Взаимодействие без сохранения состояния
3️⃣ Возможность кэширования
4️⃣ Многоуровневая система
5️⃣ Поддержка кода по требованию
6️⃣ Унифицированный интерфейс
👉 Читайте подробнее на Medium или в PDF (файл в комментариях)
👍7❤2😁1
🤔
Стандартный пакет Go
Но! Не все архитектуры предлагают инструкции CAS, на которую можно было бы полагаться при реализации
🔗 Читать
CompareAndSwap
в Go не всегда является Compare and swapСтандартный пакет Go
sync/atomics
предоставляет функции для использования базовых атомарных операций на уровне ЦП, таких как сравнение с обменом (compare and swap, CAS), через atomic.CompareAndSwapT
(где T— целочисленный тип).Но! Не все архитектуры предлагают инструкции CAS, на которую можно было бы полагаться при реализации
atomic.CompareAndSwapT
в Go. Тем не менее, Go должен компилировать эту функцию в нечто семантически эквивалентное. Разбираемся, во что именно👇🔗 Читать
👍11
func Map[T any, R any](collection []T,
iter func(item T, index int) R) []R {
result := make([]R, len(collection))
var wg sync.WaitGroup
wg.Add(len(collection))
for i, item := range collection {
go func(item T, i int) {
res := iter(item, i)
result[i] = res
wg.Done()
}(item, i)
}
wg.Wait()
return result
}
По сути, код перебирает срез элементов типа
T
и запускает горутину для каждого элемента. Все горутины записывают свой результат в один и тот же срез result
одновременно, без использования мьютексов.📌 Является ли срез
result
разделяемой памятью? В конце концов, это единая, непрерывная структура данных.С другой стороны, каждая горутина пишет только в индекс, который ей был назначен, поэтому одновременная запись в одно и то же место не произойдет. И срез
result
не читается до тех пор, пока все пишущие горутины не закончат работу.Таким образом, даже несмотря на то, что горутины пишут в один и тот же срез, они, кажется, придерживаются одного из постулатов:
Don't communicate by sharing memory, share memory by communicating
💬 Что думаете?
Please open Telegram to view this post
VIEW IN TELEGRAM
Reddit
From the golang community on Reddit
Explore this post and more from the golang community
🥱10👍7❤6🤔2🌚2
Please open Telegram to view this post
VIEW IN TELEGRAM
WunderGraph
Introducing astjson: Transform and Merge JSON Objects with Unmatched Speed in Go
🤔4🥱3
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🏖️ Синдром упущенного отпуска: почему так опасно игнорировать заслуженный отдых
Представьте: вы выиграли путевку на пляж с золотым песком и изумрудным океаном. Но радость быстро сменяется разочарованием — вместо коктейля в руках по-прежнему клавиатура и мышка. И вы понимаете — это всего лишь галлюцинации изможденного мозга, который умоляет вас остановиться и, наконец, сделать перерыв. Но мы ведь трудоголики, правда?
🔗 Читать статью
🔗 Зеркало
Представьте: вы выиграли путевку на пляж с золотым песком и изумрудным океаном. Но радость быстро сменяется разочарованием — вместо коктейля в руках по-прежнему клавиатура и мышка. И вы понимаете — это всего лишь галлюцинации изможденного мозга, который умоляет вас остановиться и, наконец, сделать перерыв. Но мы ведь трудоголики, правда?
🔗 Читать статью
🔗 Зеркало
👏8🥱6
👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
Hack MySQL
Go Antipatterns
‘Go Antipatterns’ describes bad Go code and how to make it better.
👍18🤩6🥱2🌚2❤1
🤔 Повсеместное использование указателей в качестве параметров приводит к выбору: необходимо либо проверять каждый параметр на равенство
🤯 Передача по значению может привести к случайному копированию и изменению значений полей у копии, а не у оригинального значения, но такие вещи легко обнаруживаются линтерами, на ревью и здравым смыслом.
💬 Так что использовать? Опытом делится Go-тимлид Иван Коротков, сравнивая оба способа и убеждая передавать и возвращать значения в тех случаях, где это возможно.
nil
, либо допускать, что произойдёт паника при попытке разыменования указателя nil
.🤯 Передача по значению может привести к случайному копированию и изменению значений полей у копии, а не у оригинального значения, но такие вещи легко обнаруживаются линтерами, на ревью и здравым смыслом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Go: передача значений VS передача указателей
Go - один из немногих языков, в которых структуры можно передавать параметрами и возвращать из функций как по значению, так и по указателю. Это приводит к большей выразительности языка, но также...
👍1
Представьте: вас берут на новый проект, а там сплошной легаси-код. Ваши действия👇
👍 — останусь, разберусь и постараюсь развить его
🤔 — любым способом перейду в другой проект
🥱 — а где эта грань между легаси и нормальным проектом?
❤️ — свой вариант (напишу в комментариях)
#холивар
👍 — останусь, разберусь и постараюсь развить его
🤔 — любым способом перейду в другой проект
🥱 — а где эта грань между легаси и нормальным проектом?
❤️ — свой вариант (напишу в комментариях)
#холивар
🥱145👍51🤔14👾2❤1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🤖 Итоги недели в мире ИИ и обзоры новых сервисов
Мы написали статью на VC, которая основана на очередном выпуске нашей рассылки про последние новости и тенденции в мире ИИ. Залетайте и читайте!
👇 Ниже — мини-подборка из статьи 👇
📰 Новости
▫️ OpenAI объявила о запуске долгожданного магазина кастомных чат-ботов.
▫️ В Пасадене (штат Калифорния) открывается первая закусочная CaliExpress by Flippy, полностью управляемая ИИ.
▫️ NVIDIA выпустила модель для распознавания речи Parakeet, которая по всем показателям превосходит OpenAI Whisper.
▫️ Использование ИИ в совместном научном проекте Microsoft и Тихоокеанской северо-западной национальной лаборатории в течение недели помогло определить новый элемент, который поможет снизить на 70% использование лития в батареях. Без ИИ такое исследование заняло бы по меньшей мере 20 лет.
▫️ Компания ByteDance выпустила новую модель MagicVideo-V2 для генерации видео.
🛠 Инструменты
◾️ Auto Wiki — генерирует вики-документацию для GitHub репозиториев.
◾️ Code to Flow — визуализирует, анализирует и объясняет код, написанный на всех популярных языках и фреймворках.
◾️ Concepto — платформа для создания прототипов веб-приложений.
◾️ Afforai — выполняет суммаризацию, перевод и поиск по множеству документов.
◾️ Corgea — исправляет уязвимые фрагменты кода.
◾️ Jan — опенсорсный оффлайновый чат-бот.
◾️ Plus AI — плагин для Google Slides: делает профессиональные презентации, персональные и командные дашборды, любые отчеты.
🤙 Сделай сам
🔸 WikiChat — опенсорсный инструмент для коррекции галлюцинаций с помощью информации из Википедии.
🔸 Подробная шпаргалка и советы по созданию продвинутых RAG.
🔸 OpenVoice — опенсорный инструмент для мгновенного клонирования голоса.
🎓 Туториалы
🔹 Туториал по работе с новым API Query Pipelines показывает примеры создания простых линейных цепочек и сложных ациклических графов из модулей LlamaIndex.
🔹 Туториал по объединению LLM с помощью mergekit детально разбирает 4 основных метода объединения моделей.
#чтопроисходит
Мы написали статью на VC, которая основана на очередном выпуске нашей рассылки про последние новости и тенденции в мире ИИ. Залетайте и читайте!
📰 Новости
▫️ OpenAI объявила о запуске долгожданного магазина кастомных чат-ботов.
▫️ В Пасадене (штат Калифорния) открывается первая закусочная CaliExpress by Flippy, полностью управляемая ИИ.
▫️ NVIDIA выпустила модель для распознавания речи Parakeet, которая по всем показателям превосходит OpenAI Whisper.
▫️ Использование ИИ в совместном научном проекте Microsoft и Тихоокеанской северо-западной национальной лаборатории в течение недели помогло определить новый элемент, который поможет снизить на 70% использование лития в батареях. Без ИИ такое исследование заняло бы по меньшей мере 20 лет.
▫️ Компания ByteDance выпустила новую модель MagicVideo-V2 для генерации видео.
🛠 Инструменты
◾️ Auto Wiki — генерирует вики-документацию для GitHub репозиториев.
◾️ Code to Flow — визуализирует, анализирует и объясняет код, написанный на всех популярных языках и фреймворках.
◾️ Concepto — платформа для создания прототипов веб-приложений.
◾️ Afforai — выполняет суммаризацию, перевод и поиск по множеству документов.
◾️ Corgea — исправляет уязвимые фрагменты кода.
◾️ Jan — опенсорсный оффлайновый чат-бот.
◾️ Plus AI — плагин для Google Slides: делает профессиональные презентации, персональные и командные дашборды, любые отчеты.
🤙 Сделай сам
🔸 WikiChat — опенсорсный инструмент для коррекции галлюцинаций с помощью информации из Википедии.
🔸 Подробная шпаргалка и советы по созданию продвинутых RAG.
🔸 OpenVoice — опенсорный инструмент для мгновенного клонирования голоса.
🎓 Туториалы
🔹 Туториал по работе с новым API Query Pipelines показывает примеры создания простых линейных цепочек и сложных ациклических графов из модулей LlamaIndex.
🔹 Туториал по объединению LLM с помощью mergekit детально разбирает 4 основных метода объединения моделей.
#чтопроисходит
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
Хотите эффективно анализировать процесс трассировки Go? Тогда Gotraceui идет на помощь.
Это быстрая, доступная и мощная альтернатива
🔧 GitHub
Это быстрая, доступная и мощная альтернатива
go tool trace
. Его UI специально настроен с учетом уникальных характеристик трассировок Go.🔧 GitHub
👍13
Команда Go исследует возможность добавления range-over function iterators
Go 1.22 содержит предварительную реализацию изменения, включаемую с помощью
📌 Простой пример работы функции range over:
Пример будет транслироваться внутри компилятора в код, похожий на:
Go 1.22 содержит предварительную реализацию изменения, включаемую с помощью
GOEXPERIMENT=rangefun
.📌 Простой пример работы функции range over:
package slices
func Backward[E any](s []E) func(func(int, E) bool) {
return func(yield func(int, E) bool) {
for i := len(s)-1; i >= 0; i-- {
if !yield(i, s[i]) {
return
}
}
}
}
Его можно вызвать так:s := []string{"hello", "world"}
for i, x := range slices.Backward(s) {
fmt.Println(i, x)
}
Пример будет транслироваться внутри компилятора в код, похожий на:
slices.Backward(s)(func(i int, x string) bool {
fmt.Println(i, x)
return true
})
👉
Подробнееgo.dev
Go Wiki: Rangefunc Experiment - The Go Programming Language
🤔23👍7❤🔥4❤2
Поделитесь, где вам комфортнее работается?
Anonymous Poll
27%
В офисе. Как можно работать без холиваров?
14%
Дома, в кровати. А что, есть другие варианты?
65%
Дома, за рабочим столом
4%
В кофейне
8%
Коворкинг — залог продуктивности
1%
Свой вариант (напишу в комментариях)
9%
Посмотреть результаты
❤2
Дмитрий Королёв, бэкенд-разработчик в Авито, демонстрирует бенчмарки нескольких самых популярных форматов сериализации (Avro, Protobuf, Msgpack, XML, CBOR и несколько известных библиотек для работы с JSON) в Go и рассказывает про преимущества/недостатки каждого из них.
👉 Читать
👉 Читать
👍23🤔6🥱3❤2
Краткий обзор реализации популярного метода аутентификации на Go от Eli Bendersky.
👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍3❤1
GoFunc — новая конференция по Go. Но сегодня не о ней, а о митапах для Go-разработчиков, которые уже можно посмотреть:
🌐 gRPC-стримы на практике в Go / Сергей Антоничев
🌐 Бардак в main, стандартизация и uber.fx. V2 / Данила Проценко
🌐 Как мы разметку Goняли / Хамбар Дусалиев
🌐 Как мы в СберМаркете стандартизируем разработку сервисов / Эмиль Шарифуллин
🌐 Профилирование Go-приложений в 2023 / Алексей Акулович
🌐 Что стоит за дженериками в Go / Илья Горкун
🌐 Использование ресурсов Kubernetes Go-приложениями / Антон Жуков
🌐 Быстрый поиск пути без аллокаций / Искандер Шарипов
🌐 Воркшоп «Создание Terminal UI приложений» / Никита Русин
🌐 Расширяем компилятор: кодогенерация на своем месте / Даниил Подольский
#чтопроисходит
#чтопроисходит
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30❤🔥4❤2
💡Предварительная компиляция стандартной библиотеки
С версии Go 1.20 стандартная библиотека больше не компилируется заранее при установке Go. Вместо этого, когда проект компилируется, необходимые части стандартной библиотеки компилируются по мере необходимости и добавляются в локальный кэш.
Исходя из исследования (на немецком языке), это может оказать огромное влияние на время компиляции.
Теперь представьте систему сборки, которая начинает с нуля для каждой сборки, — например, потому что инструментарий Go находится в контейнере, который удаляется после каждой сборки.
Зависимости проекта от стандартной библиотеки таким образом компилируются снова и снова для каждой сборки.
📌 Решение простое:
Эта команда компилирует стандартную библиотеку один раз. Зафиксируйте полученное состояние установки Go и наслаждайтесь более быстрым временем сборки.
С версии Go 1.20 стандартная библиотека больше не компилируется заранее при установке Go. Вместо этого, когда проект компилируется, необходимые части стандартной библиотеки компилируются по мере необходимости и добавляются в локальный кэш.
Исходя из исследования (на немецком языке), это может оказать огромное влияние на время компиляции.
Теперь представьте систему сборки, которая начинает с нуля для каждой сборки, — например, потому что инструментарий Go находится в контейнере, который удаляется после каждой сборки.
Зависимости проекта от стандартной библиотеки таким образом компилируются снова и снова для каждой сборки.
📌 Решение простое:
go install std
Эта команда компилирует стандартную библиотеку один раз. Зафиксируйте полученное состояние установки Go и наслаждайтесь более быстрым временем сборки.
👍90❤1
🧰 avo — пакет для генерации x86 assembly с помощью Go. Основная цель — облегчить процесс написания и поддержки assembly кода, который часто используется для оптимизации производительности в критических участках программ.
👉 GitHub с полным описанием и примерами
//go:build ignore
package main
import . "github.com/mmcloughlin/avo/build"
func main() {
TEXT("Add", NOSPLIT, "func(x, y uint64) uint64")
Doc("Add adds x and y.")
x := Load(Param("x"), GP64())
y := Load(Param("y"), GP64())
ADDQ(x, y)
Store(y, ReturnIndex(0))
RET()
Generate()
}
//go:generate go run asm.go -out add.s -stubs stub.go
👉 GitHub с полным описанием и примерами
GitHub
GitHub - mmcloughlin/avo: Generate x86 Assembly with Go
Generate x86 Assembly with Go. Contribute to mmcloughlin/avo development by creating an account on GitHub.
👍17❤1