-
Notifications
You must be signed in to change notification settings - Fork 0
Quick Start
Arsfy edited this page May 24, 2026
·
1 revision
This guide creates a small project with one User model, generates a Go client,
and runs a query.
mkdir gcorm-demo
cd gcorm-demo
go mod init example.com/gcorm-demoInstall the CLI if it is not already installed:
go install github.com/arsfy/gcorm/cmd/gco@latestInteractive mode:
gco initNon-interactive PostgreSQL example:
gco init --yes --provider postgresql --schema-file schema/schema.gcorm --env DATABASE_URL --output ./gen --package dbSupported providers are:
postgresqlmysqlsqlite
Example schema/schema.gcorm:
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "gco-go"
output = "./gen"
package = "db"
}
model User {
id String @id @default(uuid())
email String @unique
name String?
createdAt DateTime @default(now())
@@map("users")
}
gco validate --schema schema
gco fmt --schema schema
gco generate --schema schemaGenerated code is written to the configured generator output directory. The usual package layout is:
gen/client
gen/query
gen/model
PostgreSQL example:
go get github.com/jackc/pgx/v5/stdlibSet the connection string:
export DATABASE_URL='postgresql://postgres:postgres@localhost:5432/app?sslmode=disable'Apply the schema directly:
gco db push --schema schemaFor destructive changes, db push refuses to continue unless you pass
--force.
package main
import (
"context"
"database/sql"
"os"
_ "github.com/jackc/pgx/v5/stdlib"
"example.com/gcorm-demo/gen/client"
"example.com/gcorm-demo/gen/query"
)
func main() {
ctx := context.Background()
db, err := sql.Open("pgx", os.Getenv("DATABASE_URL"))
if err != nil {
panic(err)
}
defer db.Close()
c := client.New(db, client.WithDialect("postgresql"))
defer c.Close()
user, err := c.User.Create().
Set(
query.User.Email.Set("ada@example.com"),
query.User.Name.Set("Ada"),
).
Do(ctx)
if err != nil {
panic(err)
}
users, err := c.User.Query().
Where(query.User.Email.Contains("@example.com")).
OrderBy(query.User.CreatedAt.Desc()).
Take(20).
Do(ctx)
if err != nil {
panic(err)
}
_, _ = user, users
}- Use Schema Guide for model syntax.
- Use Querying for generated query helpers.
- Use DB Push for direct schema sync.
- Use Migrations for migration file generation.