# sql2go **Repository Path**: blue_dream_tools/sql2go ## Basic Information - **Project Name**: sql2go - **Description**: No description available - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-03-22 - **Last Updated**: 2022-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # sql2go tool This tool intend to convert SQL DDL statement to golang struct with table name and String() method. For example, here is a DDL statement: ```sql CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `name` varchar(32) NOT NULL DEFAULT '' COMMENT '用户名', `email` varchar(64) NOT NULL DEFAULT '' COMMENT '邮箱', `phone` varchar(32) NOT NULL DEFAULT '' COMMENT '手机号', `description` varchar(1024) NOT NULL DEFAULT '' COMMENT '用户介绍', `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态0|1|9:初始添加|正常|注销', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_unique` (`email`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` golang struct User is generated When type cmd `sql2go -f user.sql | gofmt`: ```go package model // NOTE: This file is auto-generated. Any modification will be lost after re-generated by sql2go. import ( "encoding/json" "time" ) // columns of table `user` const ( UserID = "id" UserName = "name" UserEmail = "email" UserPhone = "phone" UserDescription = "description" UserStatus = "status" UserCreatedAt = "created_at" UserUpdatedAt = "updated_at" ) // User contains enssential properties. type User struct { // ID defines 自增id ID *int64 `gorm:"id" comment:"自增id" json:"id"` // Name defines 用户名 Name *string `gorm:"name" comment:"用户名" json:"name"` // Email defines 邮箱 Email *string `gorm:"email" comment:"邮箱" json:"email"` // Phone defines 手机号 Phone *string `gorm:"phone" comment:"手机号" json:"phone"` // Description defines 用户介绍 Description *string `gorm:"description" comment:"用户介绍" json:"description"` // Status defines 状态0|1|9:初始添加|正常|注销 Status *int32 `gorm:"status" comment:"状态0|1|9:初始添加|正常|注销" json:"status"` // CreatedAt defines 创建时间 CreatedAt *time.Time `gorm:"created_at" comment:"创建时间" json:"createdAt"` // UpdatedAt defines 更新时间 UpdatedAt *time.Time `gorm:"updated_at" comment:"更新时间" json:"updatedAt"` } // TableName defines mapping table in database func (instance User) TableName() string { return "user" } // String method ensures that struct property can be logged func (instance User) String() string { bytes, err := json.Marshal(instance) if err != nil { panic(err) } return string(bytes) } // SetDefaultValueWhenNil method set property pointer to default value when it is nil func (instance *User) SetDefaultValueWhenNil() { var defaultInt8 int8 = 0 var defaultInt16 int16 = 0 var defaultInt32 int32 = 0 var defaultInt64 int64 = 0 var defaultUint8 uint8 = 0 var defaultUint16 uint16 = 0 var defaultUint32 uint32 = 0 var defaultUint64 uint64 = 0 var defaultStr string = "" var defaultTime time.Time = time.Now() if instance.Name == nil { instance.Name = &defaultStr } if instance.Email == nil { instance.Email = &defaultStr } if instance.Phone == nil { instance.Phone = &defaultStr } if instance.Description == nil { instance.Description = &defaultStr } if instance.Status == nil { instance.Status = &defaultInt32 } if instance.CreatedAt == nil { instance.CreatedAt = &defaultTime } if instance.UpdatedAt == nil { instance.UpdatedAt = &defaultTime } _ = defaultInt8 _ = defaultUint32 _ = defaultUint64 _ = defaultInt16 _ = defaultUint8 _ = defaultUint16 } ``` PS: gofmt command is used to make the output go code looks pretty.