SQL → GORM
Modélisation de base de données et ORM Golang

Générateur de Modèles Struct Golang GORM depuis SQL DDL

Convertissez vos schémas SQL CREATE TABLE en définitions de structures (struct) Golang avec balises GORM, balises JSON et typage Go précis.

Confidentialité 100% côté client
Zéro transmission au serveur
Préréglages :
Options du compilateur de modèles GORM et mappage de schéma
auto•pkg models•*Pointers
Schéma SQL DDL(3 tables)
// 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"
}
Structures à Faible Allocation

Structures Go pures avec agencement mémoire optimal et tags de champs idiomatiques.

Tags et Associations GORM v2

Prise en charge complète de primaryKey, foreignKey, autoIncrement et TableName().

Gestion Sécurisée de la Nullabilité

Types pointeurs ou sql.Null* configurables pour éliminer les paniques de pointeurs nuls.

Confidentialité 100% Côté Client

Toutes les analyses SQL et la génération Go s'exécutent localement en mémoire dans votre navigateur.

Précision Multi-Dialectes GORM v2

Correspondance fine des types pour PostgreSQL (UUID, JSONB), MySQL et SQLite.

Architecture Prête pour la Production

Génère des packages Go complets avec sigles idiomatiques (ID, URL, UUID), méthodes CRUD et hooks.

Référence technique et guide d'architecture

Guide Développeur : Générateur de Modèles Struct Golang GORM depuis SQL DDL — Guide de référence

Convertissez vos schémas SQL CREATE TABLE en définitions de structures (struct) Golang avec balises GORM, balises JSON et typage Go précis.

Paramètres clés et contrôles

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

Dialecte SQL cible pour analyser la syntaxe DDL, les types de données et les clés primaires.

Par défaut : MySQL
Mappage des champs nullables (Nullable Field Mapping)Enum (Pointeurs (*T) | sql.Null* | Primitifs)

Stratégie de conversion des colonnes SQL autorisant NULL en champs Go (pointeurs comme *string ou types sql.NullString).

Par défaut : Pointeurs (*T)
Générateurs de balises de struct (Struct Tag Generators)Multi-Select (gorm, json, db, yaml)

Liste des balises (tags) à ajouter à chaque champ de la structure générée.

Par défaut : gorm, json
Intégrer gorm.Model (Embed gorm.Model)Boolean

Intègre automatiquement gorm.Model lorsque les colonnes id, created_at, updated_at et deleted_at sont détectées.

Par défaut : true
Générer TableName() (Generate TableName())Boolean

Génère une méthode réceptrice TableName() sur la struct pour garantir le nom exact de la table en base de données.

Par défaut : true

Conseils de pro et bonnes practices

Si votre schéma inclut des colonnes

Si votre schéma inclut des colonnes deleted_at ou gorm.DeletedAt, l'intégration de gorm.Model active automatiquement le mécanisme de soft delete de GORM.

Mappez les colonnes TIMESTAMP

Mappez les colonnes TIMESTAMP, DATETIME et TIMESTAMPTZ sur time.Time ou *time.Time afin d'assurer un traitement sans faille des fuseaux horaires et des valeurs nulles.

Combinez les balises de colonne GORM

Combinez les balises de colonne GORM avec json:"champ,omitempty" pour maintenir une sérialisation cohérente en snake_case ou camelCase à travers vos API.

En sélectionnant PostgreSQL

En sélectionnant PostgreSQL, mappez les colonnes JSON et JSONB sur gorm.io/datatypes.JSON afin de tirer parti des assistants de requête GORM natifs.

Pièges courants et dépannage

Entiers non signés ou BIGINT mappés vers un type int 32 bits standard

Vérifiez le dialecte SQL sélectionné ; assurez-vous que BIGINT UNSIGNED soit mappé sur uint64 et INT UNSIGNED sur uint32 pour éviter tout dépassement d'entier.

Les clés étrangères ne génèrent pas les structures relationnelles associées

Veillez à ce que les contraintes FOREIGN KEY utilisent la syntaxe explicite REFERENCES table(colonne) pour permettre la déduction des pointeurs de structures liées.

Mots réservés SQL ou caractères spéciaux dans les noms de colonnes

Entourez les identifiants de guillemets ou d'accents graves (`) ; le générateur supprime les délimiteurs et applique automatiquement la balise gorm:"column:mot_reserve".

Foire aux questions (FAQ)

Comment le générateur gère-t-il les colonnes SQL acceptant les valeurs NULL ?▼

Les colonnes sans contrainte NOT NULL sont mappées sur des pointeurs Go (ex. *string, *int64) garantissant une sérialisation JSON null propre, ou sur des types comme sql.NullString.

Le code Go généré est-il conforme à la syntaxe de GORM v2 ?▼

Oui. L'ensemble des balises générées respecte les spécifications de GORM v2 (notamment primaryKey, autoIncrement, column: et type:).

Pourquoi la génération de la méthode TableName() est-elle recommandée ?▼

Par défaut, GORM utilise la forme plurielle anglaise pour déduire les noms de tables. La méthode TableName() assure la correspondance exacte avec le nom de table défini dans votre DDL.

Mes schémas SQL ou structures de base de données sont-ils envoyés à un serveur distant ?▼

Non. L'analyse syntaxique du SQL et la génération du code Go s'exécutent entièrement dans votre navigateur via un moteur AST local, sans aucun transfert de données.

Outils et utilitaires connexes

Tous les outils →
Guide Développeur : Générateur de Modèles Sequelize TypeScript depuis SQL DDLDéveloppement

Guide technique complet pour convertir les instructions SQL CREATE TABLE DDL en modèles typés Sequelize TypeScript, définitions DataTypes, attributs CreationOptional et déclarations Model.init.

Ouvrir l'outil→
Json To Elixir Ecto Référence DéveloppeurDéveloppement

Guide architectural et référence de configuration pour compiler des données JSON brutes en schémas Elixir Ecto de production, migrations, changesets et typespecs Dialyzer.

Ouvrir l'outil→
Guide Développeur : Générateur de Case Classes JSON vers Scala 3 & Scala 2Développement

Convertissez vos charges utiles JSON en case classes Scala sécurisées avec dérivation automatique de codecs Circe, Play JSON ou zio-json.

Ouvrir l'outil→
Guide Développeur : Générateur de DTOs Typés Readonly en PHP 8.2+ depuis JSONDéveloppement

Convertissez des données JSON en DTOs modernes avec les readonly classes PHP 8.2+, promotion de constructeur et désérialiseurs fromArray.

Ouvrir l'outil→
Aide-mémoire TypeScript vers GraphQL SDLDéveloppement

Référence pour développeurs convertissant interfaces, types et énumérations TypeScript en schémas GraphQL Schema Definition Language (SDL) prêts pour la production.

Ouvrir l'outil→
Guide du Développeur du Convertisseur TypeScript Interface vers Protocol Buffers proto3Développement

Traduisez vos interfaces et types TypeScript en messages Protobuf 3 avec tags incrémentaux et enums.

Ouvrir l'outil→