В этом руководстве вы узнаете, как подключиться к базе данных SQL Server из Go с помощью драйвера Microsoft SQL Server.
Создание нового проекта Go
Шаг 1. Откройте терминал и создайте каталог проекта с именем sqlservergo:
mkdir sqlservergo
Шаг 2. Перейдите в каталог проекта:
cd sqlsevergo
Шаг 3. Выполнение команды go mod init для создания файла go.mod для отслеживания зависимостей:
go mod init sqlservergo
Эта команда создаст файл go.mod в каталоге проекта, в котором будет храниться версия Go и зависимости проекта.
Шаг 4. Установите пакеты godotenv и go-mssqldb, выполнив следующие команды на своем терминале:
go get github.com/joho/godotenv go get github.com/microsoft/go-mssqldb@latest
- Godotenv позволяет считывать параметры конфигурации SQL Server из файла .env, что делает вашу программу более настраиваемой и безопасной.
- go-mssqldb — это драйвер Microsoft SQL Server, написанный на Go.
Шаг 5. Создайте базу данных BookStore и учетную запись пользователя с достаточными правами.
Шаг 6. Создайте новый файл .env в каталоге проекта со следующей конфигурацией SQL Server:
DB_SERVER=localhost DB_PORT=1433 DB_USER=joe DB_PASSWORD=YourPassword DB_NAME=BookStore
Пожалуйста, замените YourPassword на свой пароль.
Шаг 7. Создайте файлы db.go и main.go в каталоге проекта.
Подключение к базе данных SQL Server
Файл db.go будет хранить код, взаимодействующий с базой данных SQL Server:
package main
import(
"database/sql"
"fmt"
"os"
"github.com/joho/godotenv"
_ "github.com/microsoft/go-mssqldb"
)
type DBConfig struct {
Server string
Port string
User string
Password string
Database string
}
func LoadConfig()(*DBConfig, error) {
err := godotenv.Load()
if err != nil {
return nil, fmt.Errorf("error loading .env file: %w", err)
}
config := &DBConfig{
Server: os.Getenv("DB_SERVER"),
Port: os.Getenv("DB_PORT"),
User: os.Getenv("DB_USER"),
Password: os.Getenv("DB_PASSWORD"),
Database: os.Getenv("DB_NAME"),
}
// Validate that all necessary environment variables are set
if config.Server == "" || config.Port == "" || config.User == "" || config.Password == "" || config.Database == "" {
return nil, fmt.Errorf("missing one or more required environment variables")
}
return config, nil
}
func Connect(config *DBConfig)(*sql.DB, error) {
connString := fmt.Sprintf("server=%s;port=%s;user id=%s;password=%s;database=%s", config.Server, config.Port, config.User, config.Password, config.Database)
db, err := sql.Open("sqlserver", connString)
if err != nil {
return nil, fmt.Errorf("error creating a SQL Server database connection: %w", err)
}
// Verify the connection
err = db.Ping()
if err != nil {
return nil, fmt.Errorf("error verifying connection to the SQL Server: %w", err)
}
return db, nil
}
Как это работает.
Шаг 1. Объявляем основной пакет:
package main
Шаг 2. Импортируйте необходимые пакеты:
import(
"database/sql"
"fmt"
"os"
"github.com/joho/godotenv"
_ "github.com/microsoft/go-mssqldb"
)
Шаг 3. Определите структуру, в которой хранится конфигурация базы данных:
type DBConfig struct {
Server string
Port string
User string
Password string
Database string
}
Шаг 4. Определите функцию LoadConfig(), которая загружает конфигурацию базы данных из файла .env:
func LoadConfig()(*DBConfig, error) {
err := godotenv.Load()
if err != nil {
return nil, fmt.Errorf("error loading .env file: %w", err)
}
config := &DBConfig{
Server: os.Getenv("DB_SERVER"),
Port: os.Getenv("DB_PORT"),
User: os.Getenv("DB_USER"),
Password: os.Getenv("DB_PASSWORD"),
Database: os.Getenv("DB_NAME"),
}
// Validate that all necessary environment variables are set
if config.Server == "" || config.Port == "" || config.User == "" || config.Password == "" || config.Database == "" {
return nil, fmt.Errorf("missing one or more required environment variables")
}
return config, nil
}
Шаг 5. Определите Connect(), который подключается к базе данных SQL Server:
func Connect(config *DBConfig)(*sql.DB, error) {
connString := fmt.Sprintf("server=%s;port=%s;user id=%s;password=%s;database=%s", config.Server, config.Port, config.User, config.Password, config.Database)
db, err := sql.Open("sqlserver", connString)
if err != nil {
return nil, fmt.Errorf("error creating a SQL Server database connection: %w", err)
}
// Verify the connection
err = db.Ping()
if err != nil {
return nil, fmt.Errorf("error verifying connection to the SQL Server: %w", err)
}
return db, nil
}
Функция main.go включает в себя основную функцию, которая использует функции из файла db.go для подключения к базе данных SQL Server:
package main
import "fmt"
func main() {
// Load the database configuration
config, err := LoadConfig()
if err != nil {
fmt.Println(err)
return
}
// Connect to the database
db, err := Connect(config)
if err != nil {
fmt.Println(err)
return
}
defer db.Close()
fmt.Println("Successfully connected to SQL Server database.")
}
Как это работает.
Шаг 1. Загрузите конфигурацию базы данных, вызвав функцию LoadConfig():
config, err := LoadConfig()
if err != nil {
fmt.Println(err)
return
}
Шаг 2. Подключитесь к базе данных SQL Server, вызвав функцию Connect():
db, err := Connect(config)
if err != nil {
fmt.Println(err)
return
}
Шаг 3. Закройте соединение с базой данных после завершения основной функции:
defer db.Close()
Шаг 4. Отображение сообщения об успешном завершении:
fmt.Println("Successfully connected to SQL Server database.")
Запуск программы
Чтобы запустить программу go, выполните следующую команду в терминале:
go run main.go db.go
Если соединение будет установлено успешно, будет возвращен следующий вывод:
Successfully connected to SQL Server database.
Если пароль недействителен, вы получите следующую ошибку:
error verifying connection to the SQL Server: mssql: login error: Login failed for user 'joe'.
В этом случае вам необходимо проверить DB_USER и DB_PASSWORD в файле .env.
Если SQL Server не запущен, вы получите следующую ошибку:
error verifying connection to the SQL Server: unable to open tcp connection with host 'localhost:1433': dial tcp [::1]:1433: connectex: No connection could be made because the target machine actively refused it.
Убедитесь, что SQL Server запущен на DB_SERVER и прослушивает порт DB_PORT.
Краткое содержание
- Используйте драйвер Microsoft SQL Server для подключения программы Go к SQL Server.
