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