Tema
/
Interneto svetainių serverio dalies kūrimas GO

Schema ir migracijos — users lentelė, įterpimas, config

Pirma — naujos priklausomybės:

go get github.com/jackc/pgx/v5 github.com/pressly/goose/v3 github.com/joho/godotenv

Trys failai kaip skirtukai, priklausomybių tvarka: 00001_users.sqldb/embed.goconfig.go (schema, tada jos įterpimas, tada konfigūracijos supažindinimas, kur yra bazė). Paskutinis — tavo 1 pamokos config pakeitimas.

1. db/migrations/00001_users.sql — pirma migracija. -- +goose žymės nurodo goose, kur prasideda kiekviena kryptis:

-- +goose Up
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE TABLE users (
    id            UUID        PRIMARY KEY DEFAULT gen_random_uuid(),
    email         TEXT        NOT NULL UNIQUE,
    password_hash TEXT        NOT NULL,
    created_at    TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- +goose Down
DROP TABLE users;

Up sukuria, Down atšaukia. gen_random_uuid() (iš pgcrypto) kiekvienai eilutei duoda UUID pirminį raktą — jokių atspėjamų nuoseklių ID, o tai svarbu, kai dokumentai priklauso vartotojams. email yra UNIQUE; password_hash užpildomas 4 pamokoje.

2. db/embed.go — įkepk migracijas į dvejetainį:

//go:embed migrations/*.sql
var FS embed.FS

Būtent tai padaro diegimą savaime migruojantį: .sql failai keliauja dvejetainio viduje, o paleidimas įvykdo tuos, kurie dar nepritaikyti.

3. internal/config/config.go (modify) — konfigūracija sužino, kur yra bazė. Pokytis: DatabaseURL laukas, godotenv lokaliam .env skaityti ir produkcijos apsauga.

DatabaseURL: getenv("DATABASE_URL", "postgres://postgres@localhost:5432/signflow?sslmode=disable"),

Dev numatytoji reikšmė jungiasi prie lokalaus Postgres be slaptažodžio (trust auth), tad go run veikia be jokios konfigūracijos. Viskas iš 1 pamokos — Port, Env, BaseURL, IsProd — perkelta nepakitę; diff — tik naujas laukas ir .env skaitymas.

.env dev aplinkoje. godotenv.Load() skaito .env failą, jei jis yra (ir nurimsta, jei ne), tad DATABASE_URL gali laikyti gitignore'intame .env, o ne eksportuoti kiekvienoje sesijoje. Produkcijoje tikrą aplinką nustato Railway.