Skip to content
On this page

Go Structs

go

Generate plain Go structs with json struct tags from SQL schema

Example Output ​

Generated from the pet-store sample schema:

go
// Generated by @sqldoc/templates/go-structs -- DO NOT EDIT
package models

import (
	"encoding/json"
	"time"
)

type Adoption struct {
	Id int32 `json:"id"`
	PetId int32 `json:"pet_id"`
	OwnerId int32 `json:"owner_id"`
	AdoptedAt time.Time `json:"adopted_at"`
	AdoptionFee string `json:"adoption_fee"`
}

type AdoptionsAuditLog struct {
	Id int64 `json:"id"`
	TableName string `json:"table_name"`
	Operation string `json:"operation"`
	OldData *json.RawMessage `json:"old_data,omitempty"`
	NewData *json.RawMessage `json:"new_data,omitempty"`
	ChangedAt time.Time `json:"changed_at"`
}

type Category struct {
	Id int32 `json:"id"`
	Name string `json:"name"`
	Description *string `json:"description,omitempty"`
}

type LegacyInventory struct {
	Id int32 `json:"id"`
	ItemName *string `json:"item_name,omitempty"`
	OldSku *string `json:"old_sku,omitempty"`
	Quantity *int32 `json:"quantity,omitempty"`
}

type Location struct {
	Id int32 `json:"id"`
	Name string `json:"name"`
	Address string `json:"address"`
	City string `json:"city"`
	Zip *string `json:"zip,omitempty"`
}

type MedicalRecord struct {
	Id int32 `json:"id"`
	PetId int32 `json:"pet_id"`
	VisitDate time.Time `json:"visit_date"`
	Diagnosis string `json:"diagnosis"`
	Treatment *string `json:"treatment,omitempty"`
	VetName *string `json:"vet_name,omitempty"`
}

type Owner struct {
	Id int32 `json:"id"`
	Name string `json:"name"`
	Email string `json:"email"`
	Phone *string `json:"phone,omitempty"`
	CreatedAt *time.Time `json:"created_at,omitempty"`
}

type Pet struct {
	Id int32 `json:"id"`
	CategoryId *int32 `json:"category_id,omitempty"`
	Name string `json:"name"`
	Sku string `json:"sku"`
	Price string `json:"price"`
	InternalNotes *string `json:"internal_notes,omitempty"`
	Status string `json:"status"`
	CreatedAt *time.Time `json:"created_at,omitempty"`
}

type Review struct {
	Id int32 `json:"id"`
	PetId int32 `json:"pet_id"`
	OwnerId int32 `json:"owner_id"`
	Rating int32 `json:"rating"`
	Body *string `json:"body,omitempty"`
	LocationId *int32 `json:"location_id,omitempty"`
	CreatedAt *time.Time `json:"created_at,omitempty"`
}

type StaffAuditLog struct {
	Id int64 `json:"id"`
	TableName string `json:"table_name"`
	Operation string `json:"operation"`
	OldData *json.RawMessage `json:"old_data,omitempty"`
	NewData *json.RawMessage `json:"new_data,omitempty"`
	ChangedAt time.Time `json:"changed_at"`
}

Usage ​

Add to your sqldoc.config.ts:

typescript
export default {
  dialect: 'postgres',
  schema: ['./schema.sql'],
  codegen: [
    {
      template: 'go-structs',
      output: './generated/models.go',
    },
  ],
}

Then run:

bash
sqldoc codegen