内容简介:gen工具从给定的数据库生成golang结构,以便在.go文件中使用。它支持通过从数据库中读取有关列结构的详细信息,gen生成具有所需列名,数据类型和注释的go兼容结构类型。
https://github.com/smallnest/gen
介绍
gen工具从给定的数据库生成golang结构,以便在.go文件中使用。它支持 gorm 标签并实现一些可用的方法。它还可以为这些结构生成RESTful api。
通过从数据库中读取有关列结构的详细信息,gen生成具有所需列名,数据类型和注释的 go 兼容结构类型。
生成的数据类型包括对可空列 sql.NullX类型 或 guregu null.X类型 以及预期的基本内置go类型的支持。
gen基于Seth Shelnutt的 db2struct 的工作而受到启发,而Db2Struct的基础/灵感来自ChimeraCoder的gojson包 gojson的工作 。
获取
go get github.com/smallnest/gen
使用
$ gen --connstr "root@tcp(127.0.0.1:3306)/employees?&parseTime=True" --database employees --json --gorm --guregu --rest
支持的数据库
目前支持
- MariaDB的
- MySQL的
- PostgreSQL的
- Microsoft SQL Server
- SQLite的
计划支持
- 神谕
MariaDB的/ MySQL的
通过查询INFORMATION_SCHEMA.Columns表,然后格式化类型,列名和元数据来创建结构,以创建可用的兼容结构类型。
支持的数据类型
目前仅支持有限数量的数据类型。初步支持包括:
- tinyint(sql.NullInt64或null.Int)
- int(sql.NullInt64或null.Int)
- smallint(sql.NullInt64或null.Int)
- mediumint(sql.NullInt64或null.Int)
- bigint(sql.NullInt64或null.Int)
- decimal(sql.NullFloat64或null.Float)
- float(sql.NullFloat64或null.Float)
- double(sql.NullFloat64或null.Float)
- datetime(null.Time)
- 时间(null.Time)
- date(null.Time)
- 时间戳(null.Time)
- var(sql.String或null.String)
- 枚举(sql.String或null.String)
- varchar(sql.String或null.String)
- longtext(sql.String或null.String)
- mediumtext(sql.String或null.String)
- text(sql.String或null.String)
- tinytext(sql.String或null.String)
- 二进制
- BLOB
- LONGBLOB
- MEDIUMBLOB
- VARBINARY
问题
gorm
package model import ( "time" "github.com/guregu/null" "github.com/jinzhu/gorm" ) type Title struct { ToDate null.Time `gorm:"column:to_date" json:"to_date"` EmpNo int `gorm:"column:emp_no" json:"emp_no"` Title string `gorm:"column:title" json:"title"` FromDate time.Time `gorm:"column:from_date" json:"from_date"` } // TableName sets the insert table name for this struct type func (t *Title) TableName() string { return "titles" } func (t *Title) CreateTitle(db *gorm.DB) error { return db.Create(t).Error }
RESTful api
package api import ( "net/http" "github.com/julienschmidt/httprouter" "model" ) func configTitlesRouter(router *httprouter.Router) { router.GET("/titles", GetAllTitles) router.POST("/titles", PostTitle) router.GET("/titles/:id", GetTitle) router.PUT("/titles/:id", PutTitle) router.DELETE("/titles/:id", DeleteTitle) } func GetAllTitles(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { titles := []model.Title{} DB.Find(&titles) writeJSON(w, &titles) } func GetTitle(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { id := ps.ByName("id") title := &model.Title{} if DB.First(title, id).Error != nil { http.NotFound(w, r) return } writeJSON(w, title) } func PostTitle(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { title := &model.Title{} if err := readJSON(r, title); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if err := DB.Save(title).Error; err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } writeJSON(w, title) } func PutTitle(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { id := ps.ByName("id") title := &model.Title{} if DB.First(title, id).Error != nil { http.NotFound(w, r) return } updated := &model.Title{} if err := readJSON(r, updated); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // TODO: copy necessary fields from updated to title if err := DB.Save(title).Error; err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } writeJSON(w, title) } func DeleteTitle(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { id := ps.ByName("id") title := &model.Title{} if DB.First(title, id).Error != nil { http.NotFound(w, r) return } if err := DB.Delete(title).Error; err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 将数据库转换为gorm结构
- mysql 数据库转换为golang结构
- python中数字与C语言中double结构转换
- 如何使用BPF将SSH会话转换为结构化事件
- vue学习—Convert HTML string to AST,如何将html字符串转换为ast数组结构
- JavaScript进阶系列-类型转换、隐式类型转换
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Compilers
Alfred V. Aho、Monica S. Lam、Ravi Sethi、Jeffrey D. Ullman / Addison Wesley / 2006-9-10 / USD 186.80
This book provides the foundation for understanding the theory and pracitce of compilers. Revised and updated, it reflects the current state of compilation. Every chapter has been completely revised ......一起来看看 《Compilers》 这本书的介绍吧!