内容简介:从上一次GF框架版本发布到现在过去了两个多月的时间,在这期间GF框架做了大量的改进工作。并接连进一步应用到了很多高并发生产环境项目上,如REST服务端(每天千万级的请求量处理),日志搜集工具(每天单进程处理...
从上一次GF框架版本发布到现在过去了两个多月的时间,在这期间GF框架做了大量的改进工作。并接连进一步应用到了很多高并发生产环境项目上,如REST服务端(每天千万级的请求量处理),日志搜集工具(每天单进程处理10+亿条的日志数据)。同时也收到了很多朋友的开发建议和issue反馈,目前都已经全部解决完善。
GF框架也从beta版本迎来了第一个stable正式版,这是一个伟大的版本。
v1.0.898 stable
新特性
gf-orm增加sqlite数据库类型支持(http://gf.johng.cn/database/orm/database);增加
gkafka模块,对kafka的客户端程序封装,支持分组消费及指定起始位置等特性,并提供简便易用的API接口(http://gf.johng.cn/database/gkafka/index);增加 go 语言最新版本的
go modules特性支持;增加
gcron定时任务模块(http://gf.johng.cn/os/gcron/index);Web Server增加路由注册项获取/打印特性,所有的路由注册/回调注册一览无余;模板引擎增加全局变量管理,并增加多个常用的内置函数及内置变量(http://gf.johng.cn/os/gview/funcs);
gredis改进为单例操作方式(基于基层连接池特性),每次操作redis服务器时开发者无需显示调用Close方法执行关闭(http://gf.johng.cn/database/gredis/index);gf-orm增加数据库操作自动Close特性(基于底层链接池特性),开发者无需再defer db.Close(),并增加g.DB数据库对象单例别名(http://gf.johng.cn/database/orm/linkop);增加
gvar通用动态变量模块(http://gf.johng.cn/container/gvar/index);数据结构容器增加
并发安全特性开启/关闭功能,当关闭后和普通的数据结构无异,且在非并发安全模式下性能会得到提高;新增
gmlock内存锁模块(http://gf.johng.cn/os/gmlock/index);增加
gaes算法模块(http://gf.johng.cn/crypto/gaes/index);gproc模块增加执行shell命令方法(http://gf.johng.cn/os/gproc/index);新增
gfcache模块,用于带自动缓存更新的文件内容操作(文档待完善);
新功能
glog增加链式操作方法,增加日志级别管理控制、分类管理、调试管理功能;g.View增加分组名称设置,支持通过g.*对象管理器获取多个命名的单例模板引擎对象;glog增加对文件名称格式的自定义设置,支持gtime日期格式;gconv增加Ints/Uints/Floats/Interfaces转换方法;gjson增加Append方法;gparser增加NewUnsafe/Append方法;gcache增加GetOrSet/GetOrSetFunc/GetOrSetFuncLock方法;gset增加LockFunc/RLockFunc方法;ghttp.Response方法完善,增加ParseTpl/ParseTplContent/TplContent方法,Template修改为Tpl方法;ghttp.Request增加获取用户真实IP判断;Session增加Contains方法;完善
ghtml模块,增加多个方法;gcache新增Contains/SetIfNotExist方法;gvalid增加Error对象,用以管理校验错误信息;gvalid模块增加struct tag的校验规则、自定义错误提示信息绑定的支持特性(http://gf.johng.cn/util/gvalid/index);ghttp增加输入参数与struct的绑定机制,并增加对应params标签支持(http://gf.johng.cn/net/ghttp/service/handler);ghttp.Request增加服务端BasicAuth功能(文档待完善);gvalid增加字段校验别名,用于自定义返回结果字段,并更新WebServer中相关使用的模块;gf-orm链式操作增加ForPage方法,调整Chunks方法;ghttp对象路由注册增加Init&Shut自动回调方法,增加重复路由注册检测功能;gfsnotify增加默认递归Add/Remove特性;ghttp.Response增加ServiceFile方法;其他一些新功能;
功能改进
改进
ghttp.Server配置管理;改进
gcache底层对象继承关系,改进部分设计细节,提高性能;改进
gfpool文件指针池,修复部分错误,提升性能,并增加基准测试代码;改进
gmap系列并发安全map数据结构,增加多个易用性的方法;改进
gconv.Struct对象转换功能(http://gf.johng.cn/util/gconv/index);改进
grand随机数生成规则,提供了极高的随机数生成性能,并保证每一次调用随机方法时生成的都是不同的随机数值(http://gf.johng.cn/util/grand/index);改进
gfile文件内容操作方法,增加若干常用的文件内容读取方法;改进
gtime模块,并增加时区转换方法;改进
COOKIE,去掉锁机制;改进
SESSION获取方法,新增多个类型获取方法;改进
g.DB/g.Config单例缓存键名;改进
gtcp/gudp超时错误判断机制;改进
gtype底层统一修改为原子操作;改进
gvalid对struct的string属性的默认值非必需校验;改进
gvalid在关联规则下的非必需校验;改进
gf-orm在调试模式下日志自动输出功能;ghttp.Server/gspath模块静态文件检索改进;优化
ghttp.ServerConfig配置,增加struct/method``名称到uri的转换规则,通过SetNameToUri方法进行灵活配置(http://gf.johng.cn/net/ghttp/service/object);改进
*any/:name路由匹配规则,支持不带名字的*/:路由规则;修改默认配置文件名称
config.yml->config.toml(http://gf.johng.cn/os/gcfg/index);调整服务注册的
BindControllerMethod及BindObjectMethod逻辑为绑定路由到指定的方法执行;改进
garray二分查找方法,增加安全操作处理;改进
gdb.Result/RecordeToXml方法,增加可选的rootTag参数;其他一些改进;
问题修复
修复
ghttp.Server在windows下的重启失效问题;修复
ghttp.Server服务注册与回调注册路由重复判断问题;修复
garray排序数组Add变参时的死锁问题;修复
gfsnotify默认递归监控整个gspath.Add添加的目录的问题;修复
ghttp.BindParams对@file文件上传标识符的转义问题;修复
ghttp.Server日志路径丢失问题;修复
多WebServer下的状态检测问题;修复
gvalid模块min/max校验问题;修复控制器和执行对象服务注册时绑定'/'路由的问题;
修复
gvalid.CheckStruct自定义错误提示失效问题;ghttp.Server修复hook与serve方法的路由影响,并新增跳转方法;其他一些修复;
其他改动
去掉
gfile.IsExecutable方法;目录调整,将
加密/解密相关的包从encoding目录迁移到crypto目录下;增加
gfsnotify/gfcache调试信息;gf-orm允许写入的键值为nil时往数据库中写入null;统一使用
gview.Params类型作为模板变量类型;gconv.MapToStruct方法名称修改为gconv.Struct;ghttp.Server完善重启及停止的终端提示信息;完善
gring模块,增加约瑟夫问题代码作为gring示例程序;其他一些改动;
GF(Go Frame)是一款模块化、松耦合、轻量级、高性能的Go语言Web开发框架。支持热重启、热更新、多域名、多端口、多服务、HTTP/HTTPS、动态路由等特性 ,并提供了Web服务开发的系列核心组件,如:Router、Cookie、Session、服务注册、配置管理、模板引擎、数据校验、分页管理、数据库ORM等等等等, 并且提供了数十个实用开发模块集,如:缓存、日志、时间、命令行、二进制、文件锁、对象池、连接池、数据编码、进程管理、进程通信、TCP/UDP组件、 并发安全容器、Goroutine池等等等等等等。
开源项目地址(仓库保持实时同步): Gitee,Github。 如有优秀的框架使用案例,欢迎联系作者将地址展示到项目库中,您的牛逼将被世人所瞻仰。
安装
go get -u gitee.com/johng/gf
限制
golang版本 >= 1.9.2
特点
轻量级、高性能,模块化、松耦合设计,丰富的开发模块;
热重启、热更新特性,并支持Web界面及命令行管理接口;
专业的技术交流群,完善的开发文档及示例代码,良好的中文化支持;
支持多种形式的服务注册特性,强大灵活高效的路由控制管理;
支持服务事件回调注册功能,可供选择的
pprof性能分析模块;支持配置文件及模板文件的自动检测更新机制,即修改即生效;
支持自定义日期时间格式的时间模块,类似 PHP 日期时间格式化;
强大的数据/表单校验模块,支持常用的40种及自定义校验规则;
强大的网络通信TCP/UDP组件,并提供TCP连接池特性,简便高效;
提供了对基本数据类型的并发安全封装,提供了常用的数据结构容器;
支持
Go变量/Json/Xml/Yml/Toml任意数据格式之间的相互转换及创建;强大的数据库
ORM,支持应用层级的集群管理、读写分离、负载均衡,查询缓存、方法及链式ORM操作;
文档
GoFrame开发文档:http://gf.johng.cn
使用
Hello World
package main
import (
"gitee.com/johng/gf/g"
"gitee.com/johng/gf/g/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request) {
r.Response.Write("Hello World")
})
s.Run()
}多域名支持
package main
import (
"gitee.com/johng/gf/g"
"gitee.com/johng/gf/g/net/ghttp"
)
func main() {
s := g.Server()
s.Domain("localhost1,localhost2").BindHandler("/", func(r *ghttp.Request) {
r.Response.Write("localhostx")
})
s.Run()
}多端口支持
package main
import (
"gitee.com/johng/gf/g"
"gitee.com/johng/gf/g/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request){
r.Response.Writeln("go frame!")
})
s.SetPort(8080, 8081, 8082)
s.Run()
}路由控制
package main
import (
"gitee.com/johng/gf/g"
"gitee.com/johng/gf/g/net/ghttp"
)
func main() {
s := g.Server()
s.BindHandler("/order/:action/{page}.html", func(r *ghttp.Request){
r.Response.Writef("action:%s, page:%s", r.Get("action"), r.Get("page"))
})
s.SetPort(8199)
s.Run()
}数据库ORM
ORM创建/关闭
// 获取默认配置的单例数据库对象(配置名称为"default")
db, err := gdb.DB()
// 获取配置分组名称为"user-center"的单例数据库对象
db, err := gdb.DB("user-center")
// 无须显示Close,数据库引擎底层采用了链接池设计,当链接不再使用时会自动关闭单表/联表查询
// 查询多条记录并使用Limit分页
r, err := db.Table("user").Where("u.uid > ?", 1).Limit(0, 10).Select()
// 查询符合条件的单条记录(第一条)
r, err := db.Table("user u").LeftJoin("user_detail ud", "u.uid=ud.uid").Fields("u.*,ud.site").Where("u.uid=?", 1).One()
// 查询指定字段值
r, err := db.Table("user u").RightJoin("user_detail ud", "u.uid=ud.uid").Fields("ud.site").Where("u.uid=?", 1).Value()
// 分组及排序
r, err := db.Table("user u").InnerJoin("user_detail ud", "u.uid=ud.uid").Fields("u.*,ud.city").GroupBy("city").OrderBy("register_time asc").Select()
// 不使用john的联表查询
r, err := db.Table("user u,user_detail ud").Where("u.uid=ud.uid").Fields("u.*,ud.city").All()
// 不使用Fields方法指定查询字段时,默认查询为"*"
r, err := db.Table("user").Where("u.uid=1",).One()更新/删除
// 更新
r, err := db.Table("user").Data(gdb.Map{"name" : "john2"}).Where("name=?", "john").Update()
r, err := db.Table("user").Data("name='john3'").Where("name=?", "john2").Update()
// 删除
r, err := db.Table("user").Where("uid=?", 10).Delete()
// Data数值方法的参数形式比较灵活
r, err := db.Table("user").Data(`name="john"`).Update()
r, err := db.Table("user").Data("name", "john").Update()
r, err := db.Table("user").Data(g.Map{"name" : "john"}).Update()写入/保存
r, err := db.Table("user").Data(gdb.Map{"name": "john"}).Insert()
r, err := db.Table("user").Data(gdb.Map{"uid": 10000, "name": "john"}).Replace()
r, err := db.Table("user").Data(gdb.Map{"uid": 10001, "name": "john"}).Save()事务操作
if tx, err := db.Begin(); err == nil {
if r, err := tx.Table("user").Data(gdb.Map{"uid":1, "name": "john"}).Save(); err == nil {
tx.Commit()
} else {
tx.Rollback()
}
fmt.Println(r, err)
}...
更多特性及示例请查看官方开发文档:gf.johng.c
【声明】文章转载自:开源中国社区 [http://www.oschina.net]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- imi v1.0 正式版,专注单体应用的 PHP 协程应用开发框架
- CUBA Studio 12 正式版发布,企业级应用开发平台
- GoFrame v1.0.898 正式版发布,Go 应用开发框架
- imi v1.0 正式版,基于 PHP 协程应用开发框架
- 应用开发的流程
- 快应用开发优化技巧
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Practical Vim, Second Edition
Drew Neil / The Pragmatic Bookshelf / 2015-10-31 / USD 29.00
Vim is a fast and efficient text editor that will make you a faster and more efficient developer. It’s available on almost every OS, and if you master the techniques in this book, you’ll never need an......一起来看看 《Practical Vim, Second Edition》 这本书的介绍吧!
XML 在线格式化
在线 XML 格式化压缩工具
HEX HSV 转换工具
HEX HSV 互换工具