Подключение к SQL Server

В этом руководстве вы узнаете, как подключиться к базе данных 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.
Мирослав С.

Автор статей, ИБ-специалист