Доступ к реляционной базе данных c Golang

В этом руководстве представлены основы доступа к реляционной базе данных с помощью Go и пакета database/sql в его стандартной библиотеке.

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

В этом руководстве вы создадите базу данных, а затем напишете код для доступа к базе данных.

https://golang-blog.blogspot.com/2021/08/work-with-relational-database.html
Открытие дескриптора базы данных с Golang

Пакет database/sql упрощает доступ к базе данных, уменьшая потребность в управлении соединениями. В отличие от многих API доступа к данным, с database/sql вы не открываете соединение явно, выполняете работу, а затем закрываете соединение. Вместо этого ваш код открывает дескриптор базы данных, который представляет пул соединений, а затем выполняет операции доступа к данным с помощью этого дескриптора, вызывая метод Close только тогда, когда это необходимо для освобождения ресурсов, таких как те, которые удерживаются извлеченными строками или подготовленным оператором.

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

https://golang-blog.blogspot.com/2021/09/open-database-handle.html
Выполнение операторов SQL, которые не возвращают данные, с пакетом database/sql в Golang

Когда вы выполняете действия с базой данных, которые не возвращают данные, используйте метод Exec или ExecContext из пакета database/sql. Операторы SQL, которые вы выполняете таким образом, включают INSERT, DELETE и UPDATE.

Если ваш запрос может возвращать строки, используйте вместо этого метод Query или QueryContext.

https://golang-blog.blogspot.com/2021/09/execute-sql-statements.html
Запрос данных из базы данных с пакетом database/sql в Golang

При выполнении оператора SQL, который возвращает данные, используйте один из Query методов, предоставленных в пакете database/sql. Каждый из них возвращает Row или Rows, данные которых можно скопировать в переменные с помощью Scan метода. Вы можете использовать эти методы, например, для выполнения операторов SELECT.

https://golang-blog.blogspot.com/2021/09/query-data-from-db-sql.html
Использование подготовленных операторов с пакетом database/sql в Golang

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

https://golang-blog.blogspot.com/2021/09/prepared-statement-sql.html
Выполнение транзакций с пакетом database/sql в Golang

Вы можете выполнять транзакции базы данных, используя sql.Tx, который представляет транзакцию. Помимо методов Commit и Rollback, представляющих семантику конкретной транзакции, sql.Tx имеет все методы, которые вы можете использовать для выполнения общих операций с базой данных. Чтобы получить sql.Tx, вызовите DB.Begin или DB.BeginTx.

https://golang-blog.blogspot.com/2021/09/database-sql-transactions.html
Отмена незавершенных операций с базой данных в 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