SQL → GORM
Golang ORM & Datenbank-Modellierung

SQL DDL zu Golang GORM Struct Model Generator

Konvertieren Sie SQL CREATE TABLE-Schemas nahtlos in Golang Struct-Definitionen mit GORM-Tags, JSON-Tags und typsicheren Go-Mappings.

100% clientseitige Privatsphäre
Null Serverübertragung
Voreinstellungen:
GORM-Modell-Compiler-Optionen & Schema-Mapping
auto•pkg models•*Pointers
SQL DDL Schema(3 Tabellen)
// 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"
}
Zero-Allocation Strukturen

Reine Go-Strukturen mit präzisem Speicherlayout und idiomatischen Feld-Tags.

GORM v2 Tags & Assoziationen

Umfassende Unterstützung für primaryKey, foreignKey, autoIncrement und TableName()-Methoden.

Typsichere Nullbarkeit

Konfigurierbare Pointer- oder sql.Null*-Typen verhindern Nil-Pointer-Panics.

100% Lokale Datenschutz-Sandbox

Alle SQL-Analysen und die Go-Codegenerierung laufen vollständig im lokalen Browserspeicher.

Multi-Dialekt GORM v2 Präzision

Perfekte Typzuordnungen für PostgreSQL (UUID, JSONB), MySQL (AUTO_INCREMENT) und SQLite.

Produktionsreife Go-Architektur

Generiert vollständige Go-Pakete mit idiomatischen Initialismen, CRUD-Repositories und Hooks.

Technische Referenz & Architektur-Leitfaden

SQL-DDL zu Golang GORM Struct-Modell Generator — Referenz-Leitfaden

Konvertieren Sie SQL CREATE TABLE-Schemas nahtlos in Golang Struct-Definitionen mit GORM-Tags, JSON-Tags und typsicheren Go-Mappings.

Wichtige Parameter & Steuerelemente

SQL-Dialekt (SQL Dialect)Enum (MySQL | PostgreSQL | SQLite | SQL Server)

Ziel-SQL-Dialekt zum Parsen von DDL-Syntax, Datentypen und Primärschlüssel-Einschränkungen.

Standard: MySQL
Nullable-Feld-Mapping (Nullable Field Mapping)Enum (Zeiger (*T) | sql.Null* | Primitive Typen)

Strategie zur Abbildung von SQL-Spalten mit NULL-Werten in Go-Felder (z. B. *string vs. sql.NullString).

Standard: Zeiger (*T)
Struct-Tag-Generatoren (Struct Tag Generators)Multi-Select (gorm, json, db, yaml)

Liste von Struct-Tags, die jedem generierten Go-Modellattribut hinzugefügt werden sollen.

Standard: gorm, json
gorm.Model einbetten (Embed gorm.Model)Boolean

Bettet gorm.Model automatisch ein, wenn Spalten für id, created_at, updated_at und deleted_at vorhanden sind.

Standard: true
TableName() generieren (Generate TableName())Boolean

Erzeugt eine TableName()-Empfängermethode auf dem Struct, um exakte Datenbanktabellennamen zu erzwingen.

Standard: true

Profi-Tipps & Best Practices

Soft-Deletes mit gorm.Model nutzen

Wenn Ihr Datenbankschema über deleted_at oder gorm.DeletedAt-Zeitstempel verfügt, aktiviert die Einbettung von gorm.Model automatisch das Soft-Delete-Verhalten in GORM.

Präzise Zeitverwaltung mit time.Time

Ordnen Sie Spalten wie TIMESTAMP, DATETIME und TIMESTAMPTZ time.Time oder *time.Time zu, um Zeitzonen und Nullwerte in Go korrekt zu verarbeiten.

Kombinieren Sie

Kombinieren Sie GORM-Spaltenanmerkungen mit json:"feldname,omitempty", um eine einheitliche Snake_case- oder CamelCase-Serialisierung in Ihren APIs zu gewährleisten.

Wählen Sie den PostgreSQL-Dialekt

Wählen Sie den PostgreSQL-Dialekt, um JSON- und JSONB-Spalten direkt auf gorm.io/datatypes.JSON zu mappen und native Abfragefunktionen zu nutzen.

Häufige Fallstricke & Fehlerbehebung

Vorzeichenlose Ganzzahlen oder BIGINT werden als Standard-int typisiert

Prüfen Sie den gewählten SQL-Dialekt; BIGINT UNSIGNED sollte auf uint64 und INT UNSIGNED auf uint32 abgebildet werden, um Integer-Überläufe zur Laufzeit zu vermeiden.

Fremdschlüssel generieren keine Beziehungsstrukturen

Stellen Sie sicher, dass FOREIGN KEY-Klauseln die explizite Syntax REFERENCES tabelle(spalte) nutzen, damit Beziehungen zu verknüpften Structs abgeleitet werden können.

SQL-Schlüsselwörter oder Sonderzeichen in Spaltennamen

Schließen Sie Spaltennamen in Backticks oder Anführungszeichen ein; der Generator entfernt Trennzeichen automatisch und fügt das Tag gorm:"column:bezeichner" ein.

Häufig gestellte Fragen (FAQ)

Wie geht der Generator mit SQL-Spalten um, die NULL zulassen?▼

Spalten ohne NOT NULL-Constraint werden wahlweise auf Go-Zeiger (z. B. *string, *int64) für saubere JSON-Nullwerte oder auf Hilfstypen wie sql.NullString abgebildet.

Entspricht der generierte Go-Code den GORM v2-Spezifikationen?▼

Ja. Die erzeugten Struct-Tags entsprechen vollständig den Spezifikationen von GORM v2 (einschließlich primaryKey, autoIncrement, column: und type:).

Warum wird die Methode TableName() empfohlen?▼

Standardmäßig verwendet GORM englische Pluralformen für Tabellennamen. Die Methode TableName() stellt sicher, dass exakt der in der DDL definierte Tabellenname verwendet wird.

Werden SQL-Schemas oder Datenbankstrukturen an externe Server übertragen?▼

Nein. Das Parsen von SQL und die Codegenerierung erfolgen vollständig clientseitig im Browser über eine JavaScript-AST-Engine ohne jeglichen Datentransfer.

Verwandte Werkzeuge & Dienstprogramme

Alle Werkzeuge →