SQL → GORM
Modelagem de banco de dados e ORM Golang

Gerador de Modelos Struct GORM em Golang a partir de SQL DDL

Converta esquemas SQL CREATE TABLE em definições de struct em Golang com tags GORM, tags JSON e correspondência tipada de tipos Go.

Privacidade 100% no cliente
Zero transmissão ao servidor
Predefinições:
Opções do compilador de modelos GORM e mapeamento de esquema
auto•pkg models•*Pointers
Esquema SQL DDL(3 tabelas)
// Code generated by ToolsAA SQL to Golang GORM Generator. DO NOT EDIT.
package models

import (
	"github.com/google/uuid"
	"gorm.io/datatypes"
	"gorm.io/gorm"
	"time"
)

// ============================================================================
// Custom Enum Definitions
// ============================================================================

type UserRole string

const (
	UserRoleOwner UserRole = "OWNER"
	UserRoleAdmin UserRole = "ADMIN"
	UserRoleMember UserRole = "MEMBER"
	UserRoleGuest UserRole = "GUEST"
)

type SubscriptionTier string

const (
	SubscriptionTierFree SubscriptionTier = "FREE"
	SubscriptionTierPro SubscriptionTier = "PRO"
	SubscriptionTierEnterprise SubscriptionTier = "ENTERPRISE"
)

// Organization maps to database table "organizations"
type Organization struct {
	ID                   *uuid.UUID       `gorm:"column:id;primaryKey;type:uuid;default:gen_random_uuid()" json:"id,omitempty"`
	Slug                 string           `gorm:"column:slug;type:varchar(80);not null;uniqueIndex:idx_organizations_slug" json:"slug"`
	Name                 string           `gorm:"column:name;type:varchar(120);not null" json:"name"`
	Tier                 SubscriptionTier `gorm:"column:tier;type:varchar(64);not null;default:FREE" json:"tier"`
	MaxSeats             int              `gorm:"column:max_seats;not null;default:5" json:"max_seats"`
	IsActive             bool             `gorm:"column:is_active;type:boolean;not null;default:true" json:"is_active"`
	Settings             *datatypes.JSON  `gorm:"column:settings;type:jsonb" json:"settings,omitempty"`
	CreatedAt            time.Time        `gorm:"column:created_at;not null;default:CURRENT_TIMESTAMP" json:"created_at"`
	UpdatedAt            time.Time        `gorm:"column:updated_at;not null;default:CURRENT_TIMESTAMP" json:"updated_at"`
	DeletedAt            gorm.DeletedAt   `gorm:"column:deleted_at;index" json:"deleted_at,omitempty"`
}

// TableName specifies the database table name for Organization
func (Organization) TableName() string {
	return "organizations"
}

// User maps to database table "users"
type User struct {
	ID                   *uuid.UUID       `gorm:"column:id;primaryKey;type:uuid;default:gen_random_uuid()" json:"id,omitempty"`
	OrganizationID       uuid.UUID        `gorm:"column:organization_id;type:uuid;not null;index:idx_users_org" json:"organization_id"`
	Email                string           `gorm:"column:email;type:varchar(255);not null;uniqueIndex:idx_users_email" json:"email"`
	FullName             *string          `gorm:"column:full_name;type:varchar(120)" json:"full_name,omitempty"`
	Role                 UserRole         `gorm:"column:role;type:varchar(64);not null;default:MEMBER" json:"role"`
	AvatarURL            *string          `gorm:"column:avatar_url;type:varchar(500)" json:"avatar_url,omitempty"`
	IsVerified           bool             `gorm:"column:is_verified;type:boolean;not null;default:false" json:"is_verified"`
	Preferences          *datatypes.JSON  `gorm:"column:preferences;type:jsonb" json:"preferences,omitempty"`
	CreatedAt            time.Time        `gorm:"column:created_at;not null;default:CURRENT_TIMESTAMP" json:"created_at"`
	UpdatedAt            time.Time        `gorm:"column:updated_at;not null;default:CURRENT_TIMESTAMP" json:"updated_at"`
	DeletedAt            gorm.DeletedAt   `gorm:"column:deleted_at;index" json:"deleted_at,omitempty"`
	Organization         *Organization    `gorm:"foreignKey:OrganizationID;references:ID;constraint:OnDelete:CASCADE" json:"organizations,omitempty"`
}

// TableName specifies the database table name for User
func (User) TableName() string {
	return "users"
}

// AuditLog maps to database table "audit_logs"
type AuditLog struct {
	ID                   *int64           `gorm:"column:id;primaryKey;autoIncrement;type:bigint" json:"id,omitempty"`
	OrganizationID       uuid.UUID        `gorm:"column:organization_id;type:uuid;not null" json:"organization_id"`
	UserID               *uuid.UUID       `gorm:"column:user_id;type:uuid" json:"user_id,omitempty"`
	Action               string           `gorm:"column:action;type:varchar(100);not null;index:idx_audit_logs_action" json:"action"`
	IPAddress            *string          `gorm:"column:ip_address;type:varchar(45)" json:"ip_address,omitempty"`
	UserAgent            *string          `gorm:"column:user_agent;type:text" json:"user_agent,omitempty"`
	Payload              *datatypes.JSON  `gorm:"column:payload;type:jsonb" json:"payload,omitempty"`
	CreatedAt            time.Time        `gorm:"column:created_at;not null;default:CURRENT_TIMESTAMP" json:"created_at"`
	Organization         *Organization    `gorm:"foreignKey:OrganizationID;references:ID;constraint:OnDelete:CASCADE" json:"organizations,omitempty"`
	User                 *User            `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:SET NULL" json:"users,omitempty"`
}

// TableName specifies the database table name for AuditLog
func (AuditLog) TableName() string {
	return "audit_logs"
}
Structs de Baixa Alocação

Structs Go puras com mapeamento preciso de memória e tags idiomáticas.

Tags e Associações GORM v2

Suporte completo para primaryKey, foreignKey, autoIncrement e métodos TableName().

Nulabilidade com Segurança de Tipos

Uso configurável de ponteiros ou sql.Null* para prevenir pânicos por ponteiro nulo.

Privacidade Total no Navegador

Toda a análise SQL e compilação de código Go ocorrem 100% no navegador local.

Precisão Multi-Dialeto GORM v2

Mapeamento rigoroso para PostgreSQL (UUID, JSONB), MySQL e SQLite.

Arquitetura Pronta para Produção

Criação de pacotes Go com inicialismos idiomáticos (ID, URL, UUID), repositórios CRUD e hooks.

Referência técnica e guia de arquitetura

Guia do Desenvolvedor: Gerador de Modelos Struct GORM em Golang a partir de DDL SQL — Guia de referência

Converta esquemas SQL CREATE TABLE em definições de struct em Golang com tags GORM, tags JSON e correspondência tipada de tipos Go.

Parâmetros principais e controles

Dialeto SQL (SQL Dialect)Enum (MySQL | PostgreSQL | SQLite | SQL Server)

Dialeto SQL de destino usado para analisar a sintaxe DDL, tipos de dados e restrições de chave primária.

Padrão: MySQL
Mapeamento de Campos Anuláveis (Nullable Field Mapping)Enum (Ponteiros (*T) | sql.Null* | Primitivos)

Estratégia para converter colunas SQL anuláveis em campos Go (ponteiros como *string vs. tipos sql.NullString).

Padrão: Ponteiros (*T)
Geradores de Tags de Struct (Struct Tag Generators)Multi-Select (gorm, json, db, yaml)

Lista de tags que serão anexadas a cada atributo do modelo gerado.

Padrão: gorm, json
Embutir gorm.Model (Embed gorm.Model)Boolean

Embute automaticamente gorm.Model quando as colunas id, created_at, updated_at e deleted_at são identificadas.

Padrão: true
Gerar TableName() (Generate TableName())Boolean

Gera o método receptor TableName() na struct para definir exatamente o nome da tabela no banco de dados.

Padrão: true

Dicas profissionais e melhores práticas

Se a tabela possuir colunas deleted_at

Se a tabela possuir colunas deleted_at ou gorm.DeletedAt, a inclusão de gorm.Model ativa automaticamente a exclusão suave nativa do GORM.

Mapeie colunas TIMESTAMP

Mapeie colunas TIMESTAMP, DATETIME e TIMESTAMPTZ para time.Time ou *time.Time para tratar fusos horários e valores nulos com total segurança.

Combine tags de coluna GORM com json

Combine tags de coluna GORM com json:"campo,omitempty" para manter padrões consistentes em snake_case ou camelCase em suas APIs.

Suporte a PostgreSQL e tipos JSONB

Ao trabalhar com PostgreSQL, mapeie colunas JSON e JSONB para gorm.io/datatypes.JSON para utilizar recursos avançados de consulta JSON do GORM.

Problemas comuns e solução de problemas

Inteiros sem sinal ou BIGINT convertidos para o tipo int padrão de 32 bits

Verifique o dialeto SQL selecionado; mapeie BIGINT UNSIGNED para uint64 e INT UNSIGNED para uint32 para evitar estouro de limite numérico.

Chaves estrangeiras não geram structs de relacionamento

Confira se as declarações FOREIGN KEY usam a sintaxe explícita REFERENCES tabela(coluna), permitindo ao analisador inferir os ponteiros das structs associadas.

Palavras reservadas do SQL ou caracteres especiais em nomes de coluna

Envolva os nomes de colunas em acentos graves (`) ou aspas; o gerador limpa delimitadores e insere a tag gorm:"column:nome_coluna".

Perguntas frequentes (FAQ)

Como o gerador trata colunas SQL que aceitam NULL?▼

Colunas sem restrição NOT NULL são mapeadas para ponteiros Go (ex: *string, *int64) para compatibilidade perfeita com null em JSON, ou para tipos como sql.NullString.

O código Go gerado segue as convenções do GORM v2?▼

Sim. As tags geradas seguem rigorosamente a especificação do GORM v2, incluindo primaryKey, autoIncrement, column: e type:.

Por que o método TableName() é recomendado?▼

Por padrão, o GORM pluraliza nomes de structs em inglês. A criação do método TableName() garante que a struct aponte exatamente para o nome da tabela do seu DDL.

Meus esquemas SQL ou estruturas de banco de dados são enviados para algum servidor?▼

Não. Toda a análise de sintaxe SQL e a geração do código Go ocorrem 100% no navegador por meio de um mecanismo AST local, sem envio de dados.

Ferramentas e utilitários relacionados

Todas as ferramentas →
Guia do Desenvolvedor: Gerador de Modelos Sequelize TypeScript a partir de SQL DDLDesenvolvimento

Referência técnica completa para converter instruções SQL CREATE TABLE DDL em modelos Sequelize TypeScript fortemente tipados, definições DataTypes, atributos CreationOptional e chamadas Model.init.

Abrir ferramenta→
Json To Elixir Ecto Referência para DesenvolvedoresDesenvolvimento

Guia técnico e de configuração arquitetural para compilar payloads JSON brutos em esquemas Elixir Ecto de produção, migrações, changesets e typespecs do Dialyzer.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Case Classes JSON para Scala 3 e 2Desenvolvimento

Converta payloads JSON em case classes tipadas para Scala com suporte a codecs automáticos do Circe, Play JSON e zio-json.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de DTOs Tipados Readonly em PHP 8.2+ a partir de JSONDesenvolvimento

Converta dados JSON em DTOs modernos com readonly classes do PHP 8.2+, promoção de construtor e desserializadores fromArray.

Abrir ferramenta→
Cheatsheet de TypeScript para GraphQL SDLDesenvolvimento

Referência técnica para desenvolvedores converterem interfaces, tipos e enums TypeScript em esquemas GraphQL Schema Definition Language (SDL) para produção.

Abrir ferramenta→
Guia do Desenvolvedor do Conversor de TypeScript Interface para Protocol Buffers proto3Desenvolvimento

Converta interfaces e tipos TypeScript em mensagens Protobuf 3 com tags numéricas sequenciais e enums.

Abrir ferramenta→