GoFrame v0.99.682 beta 发布,更强大的 Go Web 框架

栏目: 软件资讯 · 发布时间: 5年前

内容简介:GoFrame v0.99.682 beta 发布了。GF(Go Frame)是一款模块化、松耦合、轻量级、高性能的Go语言Web开发框架。支持热重启、热更新、多域名、多端口、多服务、HTTP/HTTPS、动态路由等特性,并提供了Web服务开发的系列...

GoFrame v0.99.682 beta 发布了。GF(Go Frame)是一款模块化、松耦合、轻量级、高性能的 Go 语言Web开发框架。支持热重启、热更新、多域名、多端口、多服务、HTTP/HTTPS、动态路由等特性,并提供了Web服务开发的系列核心组件,如:Router、Cookie、Session、服务注册、配置管理、模板引擎、数据校验、分页管理、数据库ORM等等等等,并且提供了数十个实用开发模块集,如:缓存、日志、时间、命令行、二进制、文件锁、对象池、连接池、数据编码、进程管理、进程通信、TCP/UDP组件、并发安全容器、Goroutine池等等等等等等。

新特性:

  • 新增gdes包,用于DES加密/加密算法处理;

  • 新增gkafka包,kafka的golang客户端;

  • 新增gpool对象复用池,比较于标准库的sync.Pool更加灵活强大,可自定义对象的缓存时间、创建方法、销毁方法(http://gf.johng.cn/686654);

  • 完成网络通信gtcp/gudp包的重构,并进行了大量的改进工作,新增了详尽的开发文档及示例代码(http://gf.johng.cn/494382);

  • 增加gring并发安全环,标准库container/ring包的并发安全版本,并做了易用性的封装(http://gf.johng.cn/686655);

  • gtime包新增了自定义日期格式话的支持,格式化语法类似 PHP 的date语法(http://gf.johng.cn/494387);

  • gdb增加调试模式特性,使用SetDebug方法实现,在调试模式下可以获取详细的 SQL 执行记录,增加了详细的开发文档及示例代码(http://gf.johng.cn/702801);

  • gdb增加查询缓存特性,使用Cache方法实现,增加了详细的开发文档及示例代码(http://gf.johng.cn/702801);

  • ghttp.Server路由功能增加字段匹配规则特性,支持如:/order/list/{page}.html 动态路由规则特性(http://gf.johng.cn/702766);

  • gpage分页包增加分页URL规则生成模板特性,内部可使用{.page}变量指定页码位置(http://gf.johng.cn/716438);

  • 增加gmap.Map对象,这是gmap.InterfaceInterfaceMap的别名;

新功能:

  • gdb增加MaxIdleConnCount/MaxOpenConnCount/MaxConnLifetime三项配置,并增加SetMaxConnLifetime方法;

  • ghttp.Client增加HTTP账号密码设置功能(SetBasicAuth);

  • glog新增对系统换行符号的自适配调整(\n|\r\n);

  • 增加glog控制台调试模式打印开关(SetDebug);

  • gcfg增加SetFileName方法设置默认读取的配置文件名称;

  • gcfg/gjson/gparser包新增Int8/16/32/64,Uint8/16/32/64方法;

  • 增加gzip方法的封装(Zip/Unzip);

  • gview增加模板变量分隔符设置方法SetDelimiters;

  • ghttp.Response增加Writef、Writefln方法;

 功能改进:

  • 改进gfilepool文件指针池设计;改进gfile文本内容写入,增加指针池使用

  • gdb包增加调试模式特性,并支持在调试模式下获得已执行的SQL列表结果

  • 改进gproc进程间通信机制,增加进程消息分组特性,并限定队列大小

  • gdb结果方法处理增加ToXml/ToJson方法

  • gregx包名修改为gregex

  • 改进gtime.StrToTime方法,新增对常见标准时间日期的自动转换,以及对时区的自动识别支持,并调整gconv,gvalid对该包的引用

  • 增加对字符集转换的封装,gxml包中使用新增的字符集转换包来做处理

  • ghttp.Server.EnableAdmin页面Restart接口支持GET参数newExeFilePath支持

  • ghttp.Server平滑重启机制增加可自定义重启可执行文件路径,特别是针对windows系统特别有用(因为windows下不支持可执行文件覆盖更新)

  • 改进ghttp.Server静态文件检索设计,增加开发环境时的main包源码目录查找机制;改进gcfg/gview的main包源码目录查找机制

  • 优化gcache设计,LRU特性非默认开启;优化gtype/gcache基准测试脚本;新增gregx基准测试脚本,改进设计,提升性能

  • gfile包增加GoRootOfBuild方法,用于获取编译时的GOROOT数值;并改进glog包中backtrace的GOROOT路径过滤处理;

  • 改进grpool代码质量,并改进对池化goroutine数量的限制设计

  • 改进gdb.Map/List及g.Map/List的类型定义,改用别名特性以便支持原生类型输入(map/slice),并修复gdb.Model.Update方法参数处理问题

  • 调整ghttp包示例代码目录结构,增加ghttp.Client自定义Header方法,ghttp.Cookie增加Map方法用于获得客户端提交的所有cookie值,构造成map返回

  • 删除gcharset中的getcharset方法

  • 去掉gmap中常用的基本数据类型转换获取方法

  • 改进gconv.String方法,当无法使用基本类型进行字符串转换时,使用json.Marshal进行转换

  • gvalid.CheckObject方法名称修改为gvalid.CheckStruct

问题修复:

  • 修正gstr.IsNumeric错误

  • 修复当xml中encoding字符集为非UTF-8字符集时报错的问题

  • 修正gconv包float32->float64精度问题

  • 修复gpage包分页计数问题

  • 修复gdb批量数据Save错误

  • 去掉gpool中math.MAXINT64常量的使用,以修复int64到int类型的转换错误,兼容32位系统

  • 修正ghttp包没有使用Server仍然初始化相关异步goroutine的问题

安装

go get -u gitee.com/johng/gf

限制

golang版本 >= 1.9.2

特点

  1. 轻量级、高性能,模块化、松耦合设计,丰富的开发模块;

  2. 热重启、热更新特性,并支持Web界面及命令行管理接口;

  3. 专业的技术交流群,完善的开发文档及示例代码,良好的中文化支持;

  4. 支持多种形式的服务注册特性,灵活高效的路由控制管理;

  5. 支持服务事件回调注册功能,可供选择的pprof性能分析模块;

  6. 支持配置文件及模板文件的自动检测更新机制,即修改即生效;

  7. 支持自定义日期时间格式的时间模块,类似PHP日期时间格式化;

  8. 强大的数据/表单校验模块,支持常用的40种及自定义校验规则;

  9. 强大的网络通信TCP/UDP组件,并提供TCP连接池特性,简便高效;

  10. 提供了对基本数据类型的并发安全封装,提供了常用的数据结构容器;

  11. 支持Go变量/Json/Xml/Yml/Toml任意数据格式之间的相互转换及创建;

  12. 强大的数据库ORM,支持应用层级的集群管理、读写分离、负载均衡,查询缓存、方法及链式ORM操作;

  13. 更多特点请查阅框架手册源码

文档

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.New()
// 获取配置分组名称为"user-center"的数据库对象
db, err := gdb.New("user-center")
// 关闭数据库操作对象(丢回连接池对象复用)
db.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.cn


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上所述就是小编给大家介绍的《GoFrame v0.99.682 beta 发布,更强大的 Go Web 框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Blockchain Basics

Blockchain Basics

Daniel Drescher / Apress / 2017-3-16 / USD 20.99

In 25 concise steps, you will learn the basics of blockchain technology. No mathematical formulas, program code, or computer science jargon are used. No previous knowledge in computer science, mathema......一起来看看 《Blockchain Basics》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具