SQL → GORM
Modelado de base de datos y ORM de Golang

Generador de Modelos Struct GORM Golang desde SQL DDL

Convierta esquemas SQL CREATE TABLE en definiciones de estructuras struct de Golang con etiquetas GORM, etiquetas JSON y tipos Go fuertemente tipados.

Privacidad 100% del lado del cliente
Cero transmisión al servidor
Ajustes:
Opciones del compilador de modelos GORM y mapeo de esquemas
auto•pkg models•*Pointers
Esquema SQL DDL(3 tablas)
// 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"
}
Estructuras sin Asignación Extra

Estructuras Go puras con distribución de memoria óptima y etiquetas idiomáticas.

Etiquetas y Asociaciones GORM v2

Soporte completo para primaryKey, foreignKey, autoIncrement y métodos TableName().

Nulabilidad con Seguridad de Tipos

Tipos de puntero configurables o sql.Null* para evitar pánicos por puntero nulo.

Privacidad Total en el Navegador

El análisis SQL y la síntesis de código Go se ejecutan 100% localmente en su navegador.

Precisión Multi-Dialecto GORM v2

Mapeo completo de tipos para PostgreSQL (UUID, JSONB), MySQL y SQLite.

Arquitectura Lista para Producción

Genera paquetes Go con nombres idiomáticos (ID, URL, UUID), repositorios CRUD y hooks.

Referencia técnica y guía de arquitectura

Guía para Desarrolladores: Generador de Modelos Struct GORM para Golang desde SQL DDL — Guía de referencia

Convierta esquemas SQL CREATE TABLE en definiciones de estructuras struct de Golang con etiquetas GORM, etiquetas JSON y tipos Go fuertemente tipados.

Parámetros clave y controles

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

Dialecto SQL de destino para interpretar la sintaxis DDL, tipos de datos y restricciones de clave primaria.

Por defecto: MySQL
Mapeo de Campos Anulables (Nullable Field Mapping)Enum (Punteros (*T) | sql.Null* | Tipos Primitivos)

Estrategia para convertir columnas SQL con valores NULL en campos Go (punteros como *string o tipos sql.NullString).

Por defecto: Punteros (*T)
Generadores de Etiquetas Struct (Struct Tag Generators)Multi-Select (gorm, json, db, yaml)

Conjunto de etiquetas (tags) que se añadirán a cada atributo del modelo generado.

Por defecto: gorm, json
Incrustar gorm.Model (Embed gorm.Model)Boolean

Incrusta automáticamente gorm.Model cuando se detectan las columnas id, created_at, updated_at y deleted_at.

Por defecto: true
Generar TableName() (Generate TableName())Boolean

Genera el método receptor TableName() en la estructura para forzar el nombre exacto de la tabla en la base de datos.

Por defecto: true

Consejos profesionales y mejores prácticas

Cuando su esquema incluya columnas

Cuando su esquema incluya columnas deleted_at o gorm.DeletedAt, habilitar gorm.Model activa automáticamente el borrado suave nativo de GORM.

Manejo temporal preciso con time.Time

Mapee columnas TIMESTAMP, DATETIME y TIMESTAMPTZ a time.Time o *time.Time para gestionar husos horarios y valores cero de forma segura.

Combine anotaciones de columna GORM

Combine anotaciones de columna GORM con etiquetas json:"campo,omitempty" para garantizar una serialización coherente en snake_case o camelCase en sus APIs.

Al compilar para PostgreSQL

Al compilar para PostgreSQL, mapee columnas JSON y JSONB a gorm.io/datatypes.JSON para utilizar los asistentes de consulta nativos de GORM.

Errores comunes y solución de problemas

Los enteros sin signo o BIGINT se mapean al tipo int estándar de 32 bits

Revise la configuración del dialecto SQL; asegúrese de que BIGINT UNSIGNED se asigne a uint64 e INT UNSIGNED a uint32 para evitar desbordamientos de enteros.

Las claves foráneas no generan referencias de estructuras relacionadas

Asegúrese de que las restricciones FOREIGN KEY empleen la sintaxis explícita REFERENCES tabla(columna) para que el analizador deduzca punteros a estructuras asociadas.

Palabras reservadas de SQL o caracteres especiales en nombres de columna

Encierre los identificadores entre comillas o comillas invertidas (`); el generador eliminará los delimitadores y asignará la etiqueta gorm:"column:palabra_reservada".

Preguntas frecuentes (FAQ)

¿Cómo maneja el generador las columnas SQL que admiten valores NULL?▼

Las columnas sin la restricción NOT NULL se asignan a punteros de Go (ej. *string, *int64) para una serialización JSON limpia con null, o a tipos estándar como sql.NullString.

¿El código Go generado cumple con la sintaxis de GORM v2?▼

Sí. Todas las etiquetas generadas respetan las especificaciones de GORM v2, incluyendo primaryKey, autoIncrement, type:, column: e index.

¿Por qué es recomendable generar el método TableName()?▼

Por defecto, GORM pluraliza los nombres de estructuras en inglés para determinar el nombre de tabla. El método TableName() garantiza que se use exactamente el nombre especificado en su DDL.

¿Se envía algún esquema SQL o información a servidores remotos?▼

No. Todo el análisis de SQL y la síntesis de código Go se ejecutan al 100% en su navegador mediante un motor AST local sin subir ningún dato.

Herramientas y utilidades relacionadas

Todas las herramientas →
Guía de Desarrollo: Generador de Modelos Sequelize TypeScript desde SQL DDLDesarrollo

Referencia técnica para desarrolladores sobre la conversión de DDL SQL CREATE TABLE en modelos tipados Sequelize TypeScript, definiciones DataTypes, atributos CreationOptional y declaraciones Model.init.

Abrir herramienta→
Json To Elixir Ecto Referencia para DesarrolladoresDesarrollo

Guía técnica y de configuración arquitectónica para compilar cargas JSON en esquemas Elixir Ecto de producción, migraciones, changesets y typespecs de Dialyzer.

Abrir herramienta→
Guía de Desarrollo: Generador de Case Classes de JSON a Scala 3 y 2Desarrollo

Convierte cargas útiles JSON en case classes fuertemente tipadas para Scala con derivación automática de códecs para Circe, Play JSON o zio-json.

Abrir herramienta→
Guía para Desarrolladores del Generador de DTOs Tipados Readonly en PHP 8.2+ desde JSONDesarrollo

Convierte datos JSON en modernos DTOs con clases readonly de PHP 8.2+, promoción de constructor y deserializadores fromArray.

Abrir herramienta→
Guía Rápida de TypeScript a GraphQL SDLDesarrollo

Referencia técnica para desarrolladores sobre la conversión de interfaces, tipos y enums de TypeScript en esquemas GraphQL SDL listos para producción.

Abrir herramienta→
Guía para Desarrolladores del Conversor de TypeScript Interface a Protocol Buffers proto3Desarrollo

Traduce interfaces y definiciones de tipos TypeScript a mensajes Protobuf 3 con etiquetas numéricas incrementales y enums.

Abrir herramienta→