1 Star 0 Fork 24

Bell / gogo

forked from konyshe / gogo 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

GoGo Logo

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

Windows

go build -o app.exe
app.exe

Linux/MacOS

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

Start using it

  1. Download and install it:
$ go get github.com/go-sql-driver/mysql
$ go get github.com/phachon/go-logger
$ go get gitee.com/konyshe/gogo
  1. Import it in your code:
import "gitee.com/konyshe/gogo"
  1. (Optional) Import 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")

GoGo v1.1.2

  • add sql for 支持SQL,一行代码搞定RESTFul,无需一堆的controllers和models文件。还支持以表中任何一个字段作为MAP索引输出,方便客户端调用

GoGo v1.0.0

  • add router for GET, POST
  • add router for STATUS
  • add router for 解析URL,例如: /:table_name
MIT License Copyright (c) 2018 kony Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

一行代码搞定RESTFul的轻量web框架。不需要ORM,Go语言 展开 收起
Go
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/bellliao/gogo.git
git@gitee.com:bellliao/gogo.git
bellliao
gogo
gogo
v1.1.2

搜索帮助