Полный гайд по установке и настройке Go для работы с базами данных (OpenSearch, PostgreSQL, SQLite)

Полный гайд по установке и настройке Go для работы с базами данных (OpenSearch, PostgreSQL, SQLite) на локальном компьютере

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. Настройка рабочего окружения

  1. Создайте рабочую директорию:

    mkdir -p ~/go/src/myproject
    cd ~/go/src/myproject
    
  2. Инициализация модуля:

    go mod init myproject
    
  3. Установка зависимостей (драйверы для баз данных):

    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. Управление зависимостями

  1. Инициализация модуля (если еще не сделано):

    go mod init myproject
    
  2. Добавление новых зависимостей:

    go get github.com/new/package
    
  3. Обновление зависимостей:

    go mod tidy
    

6. Сборка и запуск приложения

  1. Запуск в development-режиме:

    go run main.go
    
  2. Сборка бинарного файла:

    go build -o app
    
  3. Запуск собранного приложения:

    ./app
    

7. Дополнительные инструменты

Установка утилит для разработки

go install golang.org/x/tools/cmd/godoc@latest  # Документация
go install github.com/go-delve/delve/cmd/dlv@latest  # Отладчик

Настройка IDE (VS Code)

  1. Установите расширение Go от Microsoft
  2. Нажмите Ctrl+Shift+PGo: Install/Update Tools
  3. Выберите все инструменты и нажмите OK

8. Решение частых проблем

Ошибка: “sql: unknown driver”

Убедитесь, что импортирован драйвер с _ перед пакетом:

import _ "github.com/lib/pq"

Ошибка подключения к OpenSearch

Проверьте:

  1. Работает ли сервер OpenSearch (curl -X GET https://localhost:9200 -u 'admin:admin' --insecure)
  2. Правильно ли указаны логин/пароль

Ошибка cgo при работе с SQLite

На Linux установите:

sudo apt install gcc

Теперь можем работать:

  1. Работать с OpenSearch, PostgreSQL и SQLite из Go-приложений
  2. Выполнять CRUD-операции
  3. Собирать и запускать приложения

Официальные справочники: