Отмена незавершенных операций с базой данных в Golang

Вы можете управлять незавершенными операциями с помощью Go context.Context. Контекст - это стандартное значение данных Go, которое может сообщать, была ли общая операция, которую он представляет, отменена и больше не нужна. Передавая context.Context между вызовами функций и сервисами в вашем приложении, они могут перестать работать раньше и возвращать ошибку, когда их обработка больше не требуется.

https://golang-blog.blogspot.com/2021/09/operations-cancelling.html
Управление подключениями к базе данных с пакетом database/sql в Golang

Для подавляющего большинства программ вам не нужно настраивать параметры пула соединений sql.DB по умолчанию. Но для некоторых продвинутых программ вам может потребоваться настроить параметры пула соединений или явно работать с соединениями. В этом посте объясняется, как это сделать.

Дескриптор базы данных sql.DB безопасен для одновременного использования несколькими горутинами (это означает, что дескриптор - это то, что другие языки могут назвать "потокобезопасным"). Некоторые другие библиотеки доступа к базе данных основаны на соединениях, которые могут использоваться только для одной операции за раз. Чтобы восполнить этот пробел, каждый sql.DB управляет пулом активных подключений к базе данных, создавая новые по мере необходимости для параллелизма в вашей программе Go.

https://golang-blog.blogspot.com/2021/09/db-connections-management.html
Как избежать риска внедрения SQL-кода с пакетом database/sql в Golang

Вы можете избежать риска внедрения SQL-кода, указав значения параметров SQL в качестве аргументов функции пакета sql. Многие функции в пакете sql предоставляют параметры для оператора SQL и значений, которые будут использоваться в параметрах этого оператора (другие предоставляют параметр для подготовленного оператора и параметров).

Код в следующем примере использует символ ? символ в качестве заполнителя для параметра id, который предоставляется как аргумент функции:

// Правильный формат для выполнения оператора SQL с параметрами.
rows, err := db.Query("SELECT * FROM user WHERE id = ?", id)


https://golang-blog.blogspot.com/2021/09/prevent-sql-injection.html
Разработка RESTful API с помощью Go и Gin

В этом посте представлены основы написания API RESTful веб-сервиса с помощью Go и Gin Web Framework (Gin).

Gin упрощает многие задачи кодирования, связанные с созданием веб-приложений, включая веб-сервисы. В этом руководстве вы будете использовать Gin для маршрутизации запросов, получения сведений о запросах и маршалинга JSON для ответов.

https://golang-blog.blogspot.com/2021/09/restful-api-gin.html
Пакет net/url в Golang

Пакет url анализирует URL-адреса и реализует экранирование запросов.

https://golang-blog.blogspot.com/2021/09/net-url-package-in-golang.html
Пустой интерфейс в Golang

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

https://golang-blog.blogspot.com/2021/10/empty-interface-in-golang.html
Go для Java разработчиков: Hello world пример

В постах Go для Java разработчиков будут представлены основные отличия Go для быстрого освоения Java разработчиками.

Начнем с небольшого, но полного примера. Он показывает, как реализовать и использовать простой абстрактный тип данных в Go.

https://golang-blog.blogspot.com/2021/10/go-for-java-developers-hello-world.html
Go для Java разработчиков: основные отличия Go

Объектно-ориентированное программирование

* В Go нет классов с конструкторами. Вместо методов экземпляра, иерархии наследования классов и поиска динамических методов Go предоставляет структуры и интерфейсы.

* Go позволяет использовать методы любого типа; упаковка не требуется. Получатель метода, который соответствует this в Java, может быть прямым значением или указателем.

https://golang-blog.blogspot.com/2021/10/go-for-java-developers-go-diffs.html
Go для Java разработчиков: синтаксис

Декларации

Синтаксис объявления обратный по сравнению с Java. Вы пишете имя, а затем тип. Объявления типов можно легко читать слева направо.

https://golang-blog.blogspot.com/2021/11/go-for-java-developers-syntax.html
Go для Java разработчиков: константы, структуры, указатели

Константы
В Go константы могут быть нетипизированными. Это относится к

- числовым литералам,
- выражениям, использующим только нетипизированные константы,
- и объявлениям const, в которых тип не указан, а выражение инициализатора не типизировано.

https://golang-blog.blogspot.com/2021/11/go-for-java-developers-constants-structs-pointers.html
Go для Java разработчиков: срезы, создание значений

Срез - это концептуально структура с тремя полями:

* указатель на массив,
* длина,
* и емкость

https://golang-blog.blogspot.com/2021/11/go-for-java-developers-slices.html
Go для Java разработчиков: методы и интерфейсы

Метод выглядит как обычное определение функции, за исключением того, что у него есть получатель. Получатель аналогичен ссылке this в методе экземпляра Java.

type MyType struct { i int }

func (p *MyType) Get() int {
return p.i
}

var pm = new(MyType)
var n = pm.Get()


https://golang-blog.blogspot.com/2021/11/go-for-java-developers-methods-interfaces.html
Go для Java разработчиков: ошибки, паника и восстановление

Там, где Java обычно использует исключения, Go имеет два разных механизма:

- большинство функций возвращают ошибки;
- только действительно невосстановимые условия, такие как индекс вне допустимого диапазона, создают исключения во время выполнения.

https://golang-blog.blogspot.com/2021/11/go-for-java-developers-errors-panic-recover.html
Go для Java разработчиков: горутины и каналы

Go позволяет запустить новый поток выполнения, горутину (goroutine), с помощью оператора go. Он запускает функцию в другой, недавно созданной горутине. Все горутины в одной программе используют одно и то же адресное пространство.

https://golang-blog.blogspot.com/2021/11/go-for-java-developers-goroutines-channels.html
Релиз Go 1.18

Релиз Go, версия 1.18, является важным релизом, включающим изменения в языке, реализации цепочки инструментов, среды выполнения и библиотек.

https://golang-blog.blogspot.com/2022/04/release-golang-1-18.html
Введение в использование дженериков в Golang

В релизе Go 1.18 добавлена поддержка дженериков. Дженерики — это самое большое изменение, которое было внесено в Go с момента первого релиза с открытым исходным кодом. В этом посте вы познакомитесь с новыми функциями языка. Мы не будем пытаться охватить все детали, но затронем все важные моменты.

Дженерики — это способ написания кода, который не зависит от используемых конкретных типов. Функции и типы теперь могут быть написаны для использования любого набора типов.

https://golang-blog.blogspot.com/2022/05/generics-intro.html
Начало работы с дженериками в Golang

В этом руководстве представлены основы дженериков в Go. С помощью дженериков вы можете объявлять и использовать функции или типы, которые написаны для работы с любым из набора типов, предоставляемых вызывающим кодом.

В этом руководстве вы объявите две простые неуниверсальные функции, а затем зафиксируете ту же логику в одной универсальной функции.

https://golang-blog.blogspot.com/2022/05/getting-started-generics.html
Начало работы с фаззингом в Golang

В этом посте представлены основы фаззинга в Go. При фаззинге случайные данные обрабатываются для вашего теста в попытке найти уязвимости или входные данные, вызывающие сбой. Некоторыми примерами уязвимостей, которые можно найти с помощью фаззинга, являются SQL-инъекции, переполнение буфера, отказ в обслуживании и атаки с использованием межсайтовых сценариев.

https://golang-blog.blogspot.com/2022/09/fuzzing-intro.html
Релиз Go 1.19

Релиз Go, версия 1.19, выходит через пять месяцев после Go 1.18.
Большинство его изменений касаются реализации цепочки инструментов, среды выполнения и библиотек.

https://golang-blog.blogspot.com/2022/09/release-golang-1-19.html
Релиз Go 1.20

Релиз Go, версия 1.20, вышел через шесть месяцев после Go 1.19. Большинство его изменений касаются реализации цепочки инструментов, среды выполнения и библиотек.
Есть также четыре изменения в языке.

https://golang-blog.blogspot.com/2023/02/release-golang-1-19.html
Релиз Go 1.21

Go 1.21 добавляет в язык три новых встроенных модуля.

- Новые функции min и max вычисляют наименьшее (или наибольшее для max) значение фиксированного числа заданных аргументов.
- Новая функция clear удаляет все элементы с карты или обнуляет все элементы среза.

Большинство изменений релиза касаются реализации цепочки инструментов, среды выполнения и библиотек. Улучшена работа с универсальными типами (определенно Golang продолжает догонять Java с ее дженериками :)) )

Добавлены несколько новых пакетов: log/slog, testing/slogtest, cmp, slices, maps. Последние два пакета хотелось бы отметить отдельно - как прототипы Java Collections Framework для Golang.

https://golang-blog.blogspot.com/2023/08/release-golang-1-21.html