gen will generate a .go file per table, mapping every column to a field in struct. The package name can be set with the--model flag. The model code generation can be customized with the following flags.
--gorm- Add GORM struct tag to fields--json- Add json struct tag to fields--no-json- Disable json struct tag--json-fmt=- json name format [snake | camel | lower_camel | none]--protobuf- Add protobuf struct tag to fields--db- Add db struct tag to fields
When columns within a db table are nullable, gen can generate code with nullable types using the --guregu flag, or it can use the default go type.
For more information on the types used check out guregu null.
/*DB Table Details-------------------------------------CREATE TABLE "albums"( [AlbumId] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [Title] NVARCHAR(160) NOT NULL, [ArtistId] INTEGER NOT NULL, FOREIGN KEY ([ArtistId]) REFERENCES "artists" ([ArtistId]) ON DELETE NO ACTION ON UPDATE NO ACTION)JSON Sample-------------------------------------{ "title": "FBQslWHyXcrTdtrEZpqMgCklk", "artist_id": 8, "album_id": 8}*/// Album struct is a row record of the albums table in the main databasetypeAlbumstruct {
//[ 0] AlbumId integer null: false primary: true auto: true col: integer len: -1 default: []AlbumIDint`gorm:"primary_key;AUTO_INCREMENT;column:AlbumId;type:INTEGER;" json:"album_id" db:"AlbumId" protobuf:"int32,0,opt,name=album_id"`//[ 1] Title nvarchar(160) null: false primary: false auto: false col: nvarchar len: 160 default: []Titlestring`gorm:"column:Title;type:NVARCHAR(160);size:160;" json:"title" db:"Title" protobuf:"string,1,opt,name=title"`//[ 2] ArtistId integer null: false primary: false auto: false col: integer len: -1 default: []ArtistIDint`gorm:"column:ArtistId;type:INTEGER;" json:"artist_id" db:"ArtistId" protobuf:"int32,2,opt,name=artist_id"`
}Extra funcs are generated for each struct. The funcs are intended for data validation.
// TableName sets the insert table name for this struct typefunc (a*Album) TableName() string {
return"albums"
}
// BeforeSave invoked before saving, return an error if field is not populated.func (a*Album) BeforeSave() error {
returnnil
}
// Prepare invoked before saving, can be used to populate fields etc.func (a*Album) Prepare() {
}
// Validate invoked before performing action, return an error if field is not populated.func (a*Album) Validate(actionAction) error {
returnnil
}