代码拉取完成,页面将自动刷新
同步操作将从 konyshe/gogo 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Go语言轻量web开发框架,支持固定URL、正则URL(开发中部分支持),一行代码搞定RESTFul,不依赖第三方ORM,也不需要生成一堆的controllers和models文件。使用简单,总共不超过10个接口函数。
公司数据库有100多张表,用BeeGo等框架,需要生成controllers和models等文件共200多个,鼠标滑都滑不过来。每次表字段一有修改,代码就要统统跟着修改,想想都恐怖,于是就有了这个项目。目前只支持查询请求,同时集成了轻量的web开发框架。
package main
import (
"net/http"
"gitee.com/konyshe/gogo"
)
func main() {
dataSourceName := "数据库用户名:数据库密码@tcp(数据库地址:数据库端口)/表名?charset=utf8"
if err := gogo.SQLInit("mysql", dataSourceName, 100, 5); err != nil {
gogo.Log().Error(err.Error())
return
}
gogo.GET("/restful/:table_name", func(ctx *gogo.HTTPContext) {
queryData, err := gogo.SQLQueryByMap(ctx.GetString("idx"),
ctx.GetString("feilds"),
ctx.GetPathParam(":tablename"),
ctx.GetString("where"),
ctx.GetString("order"),
ctx.GetInt("offset", 0),
ctx.GetInt("count", 10))
if err != nil {
gogo.Log().Error(err.Error())
ctx.WriteString(err.Error())
} else {
ctx.WriteJSON(queryData)
}
})
gogo.GET("/ping", func(ctx *gogo.HTTPContext) {
l, err := gogo.SQLQueryBySmallIntMap("aid", "*", "dede_sysconfig", "", "", 0, 100)
if err == nil {
ctx.WriteExecute(l,
"views/tmpl/ping.tmpl",
"views/tmpl/include/foot.tmpl",
"views/tmpl/include/head.tmpl")
return
}
gogo.Log().Error(err.Error())
})
gogo.POST("/api", func(ctx *gogo.HTTPContext) {
w := ctx.GetW()
r := ctx.GetR()
ctx.WriteByte(ctx.GetPostBody())
})
gogo.STATUS(http.StatusNotFound, func(ctx *gogo.HTTPContext) {
ctx.WriteString("Not Found")
})
gogo.Run(":3001")
}
mysql> desc dede_sysconfig;
+---------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------------------+------+-----+---------+-------+
| aid | smallint(8) unsigned | NO | | 0 | |
| varname | varchar(20) | NO | PRI | | |
| info | varchar(100) | NO | | | |
| groupid | smallint(6) | NO | | 1 | |
| type | varchar(10) | NO | | string | |
| value | text | YES | | NULL | |
+---------+----------------------+------+-----+---------+-------+
6 rows in set
go build -o app.exe
app.exe
go build -o app
./app
http://localhost:3001/ping
http://localhost:3001/restful/dede_sysconfig
http://localhost:3001/restful/dede_sysconfig?idx=varname
http://localhost:3001/restful/dede_sysconfig?idx=value
http://localhost:3001/restful/dede_sysconfig?idx=aid&&order=aid&&offset=10&&count=100
http://localhost:3001/restful/dede_sysconfig?idx=aid&&order=-aid&&offset=10&&count=100
http://localhost:3001/notfound
$ go get github.com/go-sql-driver/mysql
$ go get github.com/phachon/go-logger
$ go get gitee.com/konyshe/gogo
import "gitee.com/konyshe/gogo"
net/http
. This is required for example if using constants such as http.StatusOK
.import "net/http"
// 系统会优先判断是否命中固定URL,当固定URL无法命中的情况下,才会去判断是否命中正则URL(开发中部分支持)
gogo.GET("/restful/:table_name", func(ctx *gogo.HTTPContext)
// SQLInit 初始化数据库操作句柄,这里实际调用的是github.com/go-sql-driver/mysql,以下几个字段均可参考官方说明
// driverName string: 数据库类型,例如mysql、sqlite等
// dataSourceName string: 数据库地址,例如"数据库用户名:数据库密码@tcp(数据库地址:数据库端口)/表名?charset=utf8"
// MaxOpenConns int: 最大缓存连接数,这个数值包括了MaxIdleConns
// MaxIdleConns int:预备的最大空闲连接数
gogo.SQLInit(driverName string, dataSourceName string, MaxOpenConns int, MaxIdleConns int)
// 输出日志到运行目录下的log目录下,同时控制台输出,还会根据日志级别显示不同颜色
// gogo.Log()返回的是go-logger的指针,后面的.Error()是go-logger的方法,具体使用参考github.com/phachon/go-logger
// 此处传入的是字符串类型
// 如果你不喜欢,可以直接删掉LOGUtils.go文件
gogo.Log().Error(err.Error())
// SQLQueryByMap 将查询到的数据,按照指定字段的值做为索引构建map并返回
// columnName string: 作为索引的字段名称
// feilds string: 查询需要获取哪些字段的值,就是select后面跟着的部分,一般用"*"
// tableName string: 查询的表名
// where string: 过滤条件,就是where后面跟着的部分
// order string: 排序条件,就是order by后面跟着的部分。默认是ASC排序,除非"-"开头则DESC排序
// offset string: limit后面逗号相隔的两个数值,前者就是offset,后者就是count
// count string: limit后面逗号相隔的两个数值,前者就是offset,后者就是count
gogo.SQLQueryByMap(Idx, Feilds, TableName, Where, Order, Start, Count)
// 返回格式为string,如果是int,需要自己二次转换。本来是有直接提供转换好的接口的,给作者的强迫症删了
Tablename := ctx.GetPathParam(":table_name")
// 将官方原始的ParseFiles和Execute接口做了合并
// data interface{}: 渲染模板需要的数据
// filenames ...string: 模板文件路径
ctx.WriteExecute(l,
"views/tmpl/ping.tmpl",
"views/tmpl/include/foot.tmpl",
"views/tmpl/include/head.tmpl")
// 这里可以获取原始的http.ResponseWriter
ctx.GetW()
// 这里可以获取原始的http.Request指针
ctx.GetR()
// 将客户端提交的POST内容,在页面上显示出来。前面获取的w和r,只是无聊的演示,没有用到
ctx.WriteByte(ctx.GetPostBody())
gogo.STATUS(http.StatusNotFound, func(ctx *gogo.HTTPContext) {
// 进入该函数的时候,GoGo已经帮你在Header中写入了404的STATUS
// 将字符串"Not Found"输出到客户端页面
ctx.WriteString("Not Found")
})
// 3001就是端口号了,这里和官方HTTP接口方法一致
gogo.Run(":3001")
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。