A Go project using SQLC for type-safe database operations with domain-driven design.
Note: This is a reference implementation for sqlcpp-demo.
This project shows how to build Go applications with:
- SQLC for database code generation
- PostgreSQL with pgx driver
- Domain-driven design patterns
- Repository pattern implementation
- Integration testing with Testcontainers
internal/
├── domain/ # Business models (Order, Money, OrderStatus)
├── port/ # Repository interfaces
├── repository/ # Repository implementations
├── db/ # Generated SQLC code
└── migrations/ # Database schema
internal/domain/order.go- Main business entityinternal/port/order_port.go- Repository interfaceinternal/repository/order_repository.go- Database implementationinternal/db/queries/order.sql- SQL queries for SQLCsqlc.yaml- SQLC configuration
Uses PostgreSQL with custom type mappings:
- UUID fields →
github.com/google/uuid - Decimal fields →
github.com/shopspring/decimal - Timestamps →
time.Time
Integration tests use Testcontainers with real PostgreSQL instances. Tests automatically set up database schema and run migrations.
- Define domain models in
internal/domain/ - Add SQL migrations in
internal/migrations/ - Run
sqlc generateit would generate files ininternal/db/queries/ - Implement repository methods
internal/repository/which use SQLC-generated queries - Add integration tests in
internal/repository/for new repository methods