Полный гайд по установке и настройке Go для работы с базами данных (OpenSearch, PostgreSQL, SQLite)
Полный гайд по установке и настройке Go для работы с базами данных (OpenSearch, PostgreSQL, SQLite) на локальном компьютере
Categories:
1. Установка Go на локальный компьютер
Linux (Ubuntu/Debian)
# Удаление старых версий (если есть)
sudo rm -rf /usr/local/go
# Скачивание и установка
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz
# Добавление в PATH
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
# Проверка
go version
2. Настройка рабочего окружения
-
Создайте рабочую директорию:
mkdir -p ~/go/src/myproject cd ~/go/src/myproject
-
Инициализация модуля:
go mod init myproject
-
Установка зависимостей (драйверы для баз данных):
go get github.com/opensearch-project/opensearch-go go get github.com/lib/pq go get github.com/mattn/go-sqlite3
3. Подключение к базам данных
OpenSearch
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
"net/http"
"github.com/opensearch-project/opensearch-go"
)
func main() {
client, err := opensearch.NewClient(opensearch.Config{
Addresses: []string{"https://localhost:9200"},
Username: "admin",
Password: "admin",
Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
})
if err != nil {
log.Fatal(err)
}
// Проверка подключения
res, err := client.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to OpenSearch:", res.Status())
}
PostgreSQL
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq"
)
func main() {
connStr := "user=postgres password=1234 dbname=test sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Проверка подключения
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to PostgreSQL")
}
SQLite
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./test.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Проверка подключения
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to SQLite")
}
4. Пример CRUD-операций
PostgreSQL (создание таблицы и вставка данных)
func main() {
db, err := sql.Open("postgres", "user=postgres password=1234 dbname=test sslmode=disable")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Создание таблицы
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name TEXT,
email TEXT UNIQUE
)
`)
if err != nil {
log.Fatal(err)
}
// Вставка данных
_, err = db.Exec("INSERT INTO users (name, email) VALUES ($1, $2)", "Alice", "alice@example.com")
if err != nil {
log.Fatal(err)
}
fmt.Println("Data inserted")
}
SQLite (выборка данных)
func main() {
db, err := sql.Open("sqlite3", "./test.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, Name: %s\n", id, name)
}
}
5. Управление зависимостями
-
Инициализация модуля (если еще не сделано):
go mod init myproject
-
Добавление новых зависимостей:
go get github.com/new/package
-
Обновление зависимостей:
go mod tidy
6. Сборка и запуск приложения
-
Запуск в development-режиме:
go run main.go
-
Сборка бинарного файла:
go build -o app
-
Запуск собранного приложения:
./app
7. Дополнительные инструменты
Установка утилит для разработки
go install golang.org/x/tools/cmd/godoc@latest # Документация
go install github.com/go-delve/delve/cmd/dlv@latest # Отладчик
Настройка IDE (VS Code)
- Установите расширение Go от Microsoft
- Нажмите
Ctrl+Shift+P
→Go: Install/Update Tools
- Выберите все инструменты и нажмите OK
8. Решение частых проблем
Ошибка: “sql: unknown driver”
Убедитесь, что импортирован драйвер с _
перед пакетом:
import _ "github.com/lib/pq"
Ошибка подключения к OpenSearch
Проверьте:
- Работает ли сервер OpenSearch (
curl -X GET https://localhost:9200 -u 'admin:admin' --insecure
) - Правильно ли указаны логин/пароль
Ошибка cgo при работе с SQLite
На Linux установите:
sudo apt install gcc
Теперь можем работать:
- Работать с OpenSearch, PostgreSQL и SQLite из Go-приложений
- Выполнять CRUD-операции
- Собирать и запускать приложения
Официальные справочники: