- beego 2.0.1
- beego 2.0.0
- beego 1.12.3
- beego 1.12.2
- beego 1.10.0
- beego 1.9.0
- beego 1.7.1
- beego 1.7.0
- beego 1.6.1
- beego 1.6.0
- beego 1.5.0
- beego 1.4.3
- beego 1.4.2
- beego 1.4.1
- beego 1.4.0
- beego 1.3.0
- beego 1.2.0
- 新特性:
- 1. namespace 支持
- 2. beego 支持更加自由化的路由方式
- 3. 支持从用户请求中直接数据 bind 到指定的对象
- 4. 优化解析 form 的流程,让性能更加提升
- 5. 增加更多地 testcase 进行自动化测试
- 6. admin 管理模块所有的增加可点击的链接,方便直接查询
- 7. session 的除了 memory 之外的引擎支持 struct 存储
- 8. httplib 支持文件直接上传接口
- 9. ORM 支持 struct 中有 unexport 的字段
- 10. XSRF 支持 controller 级别控制是否启用, 之前 XSRF 是全局设置只要开启了就会影响所有的 POST PUT DELET 请求,但是项目中可能 API 和页面共存的情况,页面可能不需要类似的 XSRF,因此支持在 Prepare 函数中设置值来控制 controller 是否启用 XSRF. 默认是 true,也就是根据全局的来执行.用户可以在 prepare 中设置是否关闭.
- 11. controller 支持 ServeFormatted 函数,支持根据请求 Accept 来判断是调用 ServeJson 还是 ServeXML
- 12. session 提供 memcache 引擎
- 13. Context 中的 Download 函数支持自定义文件名提供下载
- 新特性:
- bug 修复
- beego 1.1.4
- beego 1.1.3
- beego 1.1.2
- beego 1.1.1
- beego 1.1.0
- 436 一次插入多个对象
- 384 query map to struct
- 440 on_delete 不自动删除的问题
- 441 时区问题
- beego 1.0.0
beego 2.0.1
发布2.0.0的时候,因为go mod的一些错误,导致我们 checksum 不再正确,所以发了2.0.1。
beego 2.0.0
Refactor
- 重新将Beego划分成四个主要部分: 1.1 server: 包括web模块. 1.2 client: 包括ORM, cache, httplib 模块. 1.3 task: 支持周期任务和定时任务。 1.4 core: 包括 validation, config, logs 和 admin 模块.
- 增加
adapter
模块,作为 1.x 升级到 2.x 的适配模块 - 为
cache
,httplib
,session
,task
,ORM
模块的 API 增加context.Context
. - 为
cache
,httplib
,session
,task
的 API增加error
作为返回值. - 解耦各个模块,使各个模块只依赖于 core 模块.
- 更好的可观测性支持,目前支持了 ORM, web, httplib 模块.
- 引入
filter-chain
模式用于扩展 AOP 业务逻辑.
Feature:
- 健康检查能够返回json串了. 4055
- TLS 支持
ClientAuth
选项了. 4116 orm.RawSeter
支持orm.Fielder
接口了. 4191- 支持新的,MySQL的大小写敏感(strict case-sensitive)的操作符. 4198
- 在 ORM 中支持
opentracing
和prometheus
. 4141 - 在
httplib
中支持prometheus
. 4145 - 使用新的API来替换部分过期
redis
API,同时支持了更加丰富的redis
参数 4137 orm
全面支持默认值. 4156- 为
config
模块添加Unmarshaler
,Sub
,OnChange
方法. 4175 - 支持自定义日期格式. 4174, 4179, 4188
- 支持时间精度. 4186
- 支持
etcd
作为配置中心. 4195 - 优化
rawSet.QueryRows
,以避免重复调用parseStructTag
. 4210 - 执行
ORM
的命令时,允许忽略部分表. 4211 - 支持
PostgresQueryBuilder
4205 - 强大的自定义日期格式实现
PatternLogFormatter
.4229 - 支持自定义
ES
索引名字. 4233 - 支持多server. 4234
- 支持 toml. 4262
- 使用
unmarshaler
方法以解析web
中的配置 4266 - 增加
MaxUploadFile
以控制上传文件的内存占用. 4275 - 支持使用
json
来初始化session
实现. 4277 - 支持直接使用
config
来读取配置. 4278 session
支持CookieSameSite
选项 4226
Fix:
- 修复
log
重连问题(logs/conn.go). 4056 - 请求体过大能正确返回413错误了. 4058
- 修复
session
模块index out of range
错误. 4068 - 修复
context/input#Query
方法并发问题. 4066 - 允许使用环境变量来指定初始化配置文件. 4111
- 为XSRF增加了 httponly 和 secure 的 flag. 4126
- 修复了 windows 下创建临时文件的问题 4244
- 主键是非数字类型时,插入时会返回特定的error信息,表明无法生成自增主键. 4150
- 修复了
Fielder
在使用orm.Raw()
的时候,未曾调用SetRaw
设置值的问题. 4160 - 修复在非数字主键下,执行
InsertOrUpdate
方法成功却又返回 error 的问题. 4158 - 修复字段是结构体的情况下,
queryRaw
未能正确赋值结果集的问题 4173 validator.Error
在缺省tag信息的情况下,会使用字段名字来构建错误信息. 4225- 修复task模块的死锁问题. 4246
- 修复http提交表单过大导致OOM的问题. 4272
Doc:
beego 1.12.3
Feature:
- 健康检查可以返回 JSON 格式数据. 4055
- TLS 支持
ClientAuth
选项. 4116 orm.RawSeter
支持orm.Fielder
. 4191- 支持MySQL字符串敏感操作符. 4198
Fix:
- 修复重连BUG logs/conn.go. 4056
- 请求过大时返回403错误码. 4058
- 修复Prepare Statement中的多线程竞争. 4061
- 修复Session中
index out of range
错误. 4068 - 修复context/input Query的并发问题. 4066
- 允许使用环境变量来指定配置文件. 4111
- XSRF添加 secure 和 http only 标志. 4126
- 修复Windows下临时文件目录错误问题 4244
- 支持CookieSameSite选项. 4226
- 减小
Prepare Statement
缓冲的大小,避免too many statement
错误. 4261
beego 1.12.2
- Fix: 热更新老进程未能退出问题 #4005
- Enhance: ORM异常退出时打印堆栈 #3743
- Enhance: GetMapData使用读锁 #3803
- Fix: 正确读取符号路径目录下的文件 #3818
- Fix: Cache, context, session使用锁来保护变量 #3922
- Fix: URL编码的路径被错误解码导致匹配路径错误 #3943
- Fix: genRouterCode生成错误代码 #3981
- Enhance: 静态文件缓存使用LRU算法,并且限制文件数量和文件大小 #3984
- Fix: 设置最大连接数失效问题 #3985
- Fix: SQLite 不支持SELECT … FOR UPDATE #3992
- Enhance: 为
httplib
的PostFile
方法添加Transfer-Encoding
#3993 - Enhance: ORM支持位操作 #3994
- Fix:
BConfig.Listen.Graceful
为true
的时候RunWithMiddleware
,App.Run(middleware)
不起效 #3995 - Fix: 错误信息中带上
label
#4001 - Fix: 关闭
logger
之后依旧发送关闭信号,造成 panic #4004 - Enhance: 在
beforeFilter
执行之前设置好RouterPattern
#4007 - Fix: 使用
HTMLEscapeString
以避免 XSS 攻击 #4018 - Fix: 进程未能退出 #4005
- Enhance: 使用
scan
指令取代keys
#4016 - Feature: 支持
prometheus
#4021 - Fix:
Prepare Statement
数量超出数据库上限 #4025 - Enhance: 支持全网段手机号码校验 #4027
- Fix: 无法设置
section
的名字 #4027 - Fix: 当
multi
为 0 时orm/db.go
中strings.Repeat
会 panic #4032 - Enhance:
redis
的idle timeout
可配置化 #4033
beego 1.10.0
- Update log.go add GetLevel Function to Log #2970
- Fix a typo “conflict” #2971
- Bug on private fields #2978
- Fix access log console unexpected ‘\n’ at end of each log. #2976
- Fix Documentation for HTTP status codes descriptions. #2992
- Redis cache: make MaxIdle configurable #3004
- Update: Fix migration generate SQL #3017
- Handle pointer validation #3046
- Fix the issue TaseCase TestFormatHeader_0 is failed #3066
- Fix BEEGO_RUNMODE #3064
- Swagger: Allow example values with different types, allow example for enum. #3085
- Fix the bug: unable to add column with ALTER TABLE #2999
- Set default Beego RunMode to production #3076
- Fix typo #3103
- In dev mode, template parse error cause program lock #3126
- Amend a very minor typo in a variable name #3115
- When log maxSize set big int,FileWrite Init fail #3109
- Change github.com/garyburd/redigo to newest branch github.com/gomodul… #3100
- ExecElem.FieldByName as local variable #3039
- Allow log prefix #3145
- Refactor yaml config for support multilevel #3127
- Create redis_cluster.go #3175
- Add field comment on create table #3190
- Update: use PathEscape replace QueryEscape #3200
- Update gofmt #3206
- Update: Htmlquote Htmlunquote #3202
- Add ‘FOR UPDATE’ support for querySet #3208
- Debug stringsToJSON #3171
- Fix defaut value bug, and add config for maxfiles #3185
- Fix: correct MaxIdleConnsPerHost value to net/http default 100. #3230
- Fix: When multiply comment routers on one func #3217
- Send ErrNoRows if the query returns zero rows … in method orm_query… #3247
- Fix typo #3245
- Add session redis IdleTimeout config #3239
- Fix the wrong status code in prod #3226
- Add method to set the data depending on the accepted #3182
- Fix Unexpected EOF bug in staticfile #3152
- Add code style for logs README #3146
- Fix response http code #3142
- Improve access log #3141
- Auto create log dir #3105
- Html escape before display path, avoid xss #3022
- Acquire lock when access config data #3250
- Fix orm fields SetRaw function error judge problem #2985
- Fix template rendering with automatic mapped parameters (see #2979) #2981
- Fix the model can not be registered correctly on Ubuntu 32bit #2997
- Feature/yaml #3181
- Feature/autocert #3249
beego 1.9.0
- Fix the new repo address for casbin #2654
- Fix cache/memory fatal error: concurrent map iteration and map write #2726
- AddAPPStartHook func modify #2724
- Fix panic: sync: negative WaitGroup counter #2717
- incorrect error rendering (wrong status) #2712
- validation: support int64 int32 int16 and int8 type #2728
- validation: support required option for some struct tag valids #2741
- Fix big form parse issue #2725
- File log add RotatePerm #2683
- Fix Oracle placehold #2749
- Supported gzip for req.Header has Content-Encoding: gzip #2754
- Add new Database Migrations #2744
- Beego auto generate sort ControllerComments #2766
- added statusCode and pattern to FilterMonitorFunc #2692
- fix the bugs in the “ParseBool” function in the file of config.go #2740
bee 1.9.0
- Added MySQL year data type #443
- support multiple http methods #445
- The DDL migration can now be generated by adding a -ddl and a proper “alter” or “create” as argument value. #455
- Fix: docs generator skips everything containing ‘vendor’ #454
- get these tables information in custom the option #441
- read ref(pk) #444
- Add command bee server to server static folder.
beego 1.7.1
新增功能:
- access log 增加 IP #2156
- orm 增加新接口 ReadForUpdate #2158
- 参数 bind 支持数组 form,columns[0].Data=foo&columns[1].Data=bar&columns[2].Data=baz #2111
- 自定义 recover 函数,增加配置
beego.BConfig.RecoverFunc
,默认和原来保持一致,但是用户可以自己定义 #2004 - memcache cache 同时支持 byte 和 string 的存储,这样就可以通过 gob 保存 struct #1521
- ORM delete 支持按照指定条件删除 #1802
- swagger 的支持输出 yaml #2162
- 增加 RunController 和 RunMethod,让用户自定义路由规则 #2017
修复 bug:
- 静态目录如果已经存在 index.html,当访问目录的时候不会自动添加 /, 例如访问 /swagger 不会跳转到 /swagger/,这样会导致相对的 css 和 js 访问不存在 #2142
- beego admin ui 里面访问时间排序没有按照 us, ms 排序,而是按照字符排序 #1877
- captcha 生产图片的时候,自定义 height 和 width crash #2161
- DELETE 请求下开启了 CopyBody 情况下,如果 body 为空 panic #1656
beego 1.7.0
新增改进功能:
- Filter 访问速度提升 7.5 倍以上 #1799
- Gzip 压缩的时候支持不同的 level #1808
- ORM PK 支持负数 #1810
- ORM 支持自定义自增 ID 的值 #1826
- Context 下载文件函数改进:下载文件之前先检查是否存在 #1827
- log增加
GetLogger
函数,可以增加相应的前缀 #1832
package main
import "github.com/astaxie/beego/logs"
func main() {
logs.Warn("this is a warn message")
l := logs.GetLogger("HTTP")
l.Println("this is a message of http")
logs.GetLogger("orm").Println("this is a message of orm")
logs.Debug("my book is bought in the year of ", 2016)
logs.Info("this %s cat is %v years old", "yellow", 3)
logs.Error(1024, "is a very", "good", 2.5, map[string]int{"id": 1})
logs.Critical("oh my god")
}
- session 增加 Log,一旦错误发生可以记录日志. #1833
- logs 包添加两个 public 函数,
EnableFuncCallDepth
和SetLogFuncCallDepth
, 用来设置函数的调用层级. #1837 - 支持
go run
运行 beego 的项目代码 #1840 - 添加
ExecuteTemplate
函数,这样用户就可以通过这种方式访问 template,而不是直接访问 map,因为 map 有并发读写问题 #1848 - ORM 字段支持
time
类型 #1856 - ORM One 接口只获取一条 #1874
- ORM 支持 json jsonb 类型 #1875
- ORM 默认使用 text 类型 #1879
- session 配置三个配置,
EnableSidInHttpHeader
EnableSidInUrlQuery
SessionNameInHttpHeader
, 允许用户可以在 http 头和 URL 中带 sid #1897 - 自动化路由改进生成的文件名,之前太长了 #1924
支持复杂的模板引擎. ace jade #1940
beego.AddTemplateEngine("ace", func(root, path string, funcs template.FuncMap) (*template.Template, error) {
aceOptions := &ace.Options{DynamicReload: true, FuncMap: funcs}
aceBasePath := filepath.Join(root, "base/base")
aceInnerPath := filepath.Join(root, strings.TrimSuffix(path, ".ace"))
tpl, err := ace.Load(aceBasePath, aceInnerPath, aceOptions)
if err != nil {
return nil, fmt.Errorf("error loading ace template: %v", err)
}
return tpl, nil
})
- session 引擎支持 ssdb #1953
- RenderForm 支持输出 required #1993
- 让打印的 beego 日志更加美观 #1997
- ORM 支持 struct 中带有
time.Time
指针 #2006 - Controller 中增加
TplPrefix
这样就可以在 baseController 制定读取模板的前缀目录 #2030 - jsonb 函数中增加 js 函数的判断,避免函数不存在时候出错. #2045
- ORM 增加
InsertOrUpdate
函数 #2053 - Filter 函数增加重置参数的参数. 因为
beego.InsertFilter("*", beego.BeforeStatic, RedirectHTTP)
的时候,参数会赋值给:splat
,从而影响后续如果路由里面也有想用的路由, 那么就会引起冲突,因此增加这样的函数以方便用户重置。 #2085 - session 包配置采用对象初始化,而抛弃传递 json 的方式. 如果独立使用session包的可能会引起兼容性问题 #2096
- Swagger 迁移到2.0版本,现在生产的代码无需依赖 API,直接生产 swagger.json
bugfix:
- 静态路由中
/m
自动跳转到/m/
#1792 - test 的时候解析配置文件出错 #1794
- 文件 rotato 的时候产生 race condition #1803
- 修复 multiple response.WriteHeader calls 的错误 #1805
- ORM 如果主键是 uint 的时候 panic #1828
- 日志 rotate 的时候如果当前时间小于 2000 panic #
- context 重用导致 XSRF 重用#1863
- ORM InsertMulti 的时候当是 * 类型时 panic #1882
- task 中任务在很微小的时间内可能存在执行多次的情况 #1909
- IE 浏览器下载文件名混乱 #1912
- ORM DISTINCT 实现 #1938
- Logs 包里面设置文件的 permit 时候,int 无法设置. #1948 #2003
- QueryRow 和 QueryRows 查询获取数据后外键字段不填充值 #1964
- 当 beego 应用跑在代理之后的时候,scheme 通过
X-Forwarded-Proto
获取 #2050 - 静态文件访问目录时候跳转到
目录/
的时候自动带上参数 #2064
beego 1.6.1
新增功能:
- ORM 支持 Oracle 驱动
- ORM 的 Model 支持 inline
- Cache 支持 ssdb引擎
- console 支持颜色输出配置
- 添加 travis 的自动化集成测试
- 日志新增 mulitfile 引擎,支持不同级别的输出到不同的文件
bugfix:
- cookie 时间设置
- 路由规则里面的匹配 #1580
- 在 beego.Run() 之前没有 log 输出
- config 获取 []string 为空的时候返回为空,应该返回 nil
- ini 接口保存的时候需要注释不正确
- 异步存储日志的时候时间可能延迟的问题
- 配置文件解析两次,导致部署 key 获取失败
- 正则路由无法解析本身带有
()
的问题 - mail发送中文附件和 title 乱码的问题
- ORM 里面缺少 Distinct 的接口定义
- Layout 编译失败
- logrotate 的时候文件名不正确
- CORS 插件失败的时候不生效
- filters 的路径参数和路由参数冲突
- 静态文件找不到返回 200,应该返回 404
- 添加 GroupBy 的 interface 支持
- Go1.6 的并发访问 map 引起静态文件换成崩溃
- httplib JSONBody 输出的时候采用 json.Encoder 会输出一个额外的换行符
- 异步模式下,log 调用 flush,Close 的时候日志丢失
beego 1.6.0
新功能:
- 文件 log 支持 rotate 支持类似
xx.2013-01-01.2.log
这样的输出 #1265 - context.response 支持了原生的 Flush,Hijack,CloseNotify
- ORM 支持 Distinct 操作 #1276
- 新增加模板函数 map_get #1305
- ORM 支持 tidb 引擎 #1366
- httplib 请求参数支持 []string #1308
- ORM querySeter 添加 GroupBy 方法 #1345
- Session 的 MySQL 引擎支持自定义表名 #1348
- log 的 file 引擎性能提升 30%,同时支持自定义创建的文件权限 #1560
- session 支持通过 query 获取 #1507
- Cache 模块支持多个 Cache 对象,之前调用 NewCache 获取的是同一个 Cache,现在会初始化不同的 Cache 对象。
- validation 支持自定义验证函数
bugfix:
- context 里面 bind 函数如果参数为空 crash #1245
- ORM 中 manytomany 获取 reverse 的时候出错。#671
- http: multiple response.WriteHeader calls #1329
- ParseForm 解析日期使用当前的 timezone #1343
- log 引擎里面 Smtp 发送邮件无法认证
- 修复路由规则的一些 issue:
/topic/:id/?:auth
,/topic/:id/?:auth:int
#1349 - 修复注释文档解析的时候 nil 引起 crash #1367
- static 目录下的 index.html 无法读取#1508
- dbBase.Update 失败不返回 err #1384
- validation 里面设置的 Required 只对 int 有效,int64 无效
- ORM 创建外键是 string 类型的主键时创建 varchar(0) 的字符问题 #1379
- graceful 同时开启 http 和 https 的时候出错 #1414
- ListenTCP4 开启之后如果 httpaddr 为空还是监控 TCP6
- migration 不支持 postgres #1434
- ORM text、bool 等默认值问题导致创建表出错
- graceful 导致 panic 问题 negative WaitGroup counter
优化:
- example 移到了 samples
- 所有代码符合 golint 规范
- 重写路由树底层,性能提升三倍左右
- 每次请求的 context 采用 sync.Pool 复用,内存和性能提升
- 模板编译优化速度,按需编译 #1298
- 优化了 beego 的配置管理,采用统一的 BConfig,更易读易管理
- 优化了 beego 的整体结构代码,使得代码更易读维护
- 所有初始化的信息统一到 AddAPPStartHook 函数中去,易于管理
- 移除了 middleware,之后全部采用 plugins 来管理插件
- 重构 Error 处理,使得 Error 更加易懂
beego 1.5.0
新功能:
- 优雅重启模块:grace
- httplib 增加 JsonBody 函数,支持 raw body 以 Json 格式发送
- context input 增加 AcceptsHtml AcceptsXml AcceptsJson 函数
- 配置文件优先从 Runmode 中获取
- httplib 支持 gzip
- Log 模块默认不采用异步方式
- validation 增加循环嵌套验证
- 增加 apk mime
- ORM 支持 eq 和 ne
bugfix:
- ledis 驱动的参数错误
- 当页面放置一段时间,验证码将从缓存中失效。当用户再来刷新验证码将出现验证码 404。对于 reload 操作应该直接生成验证码。
- Controller 定义 Error 异常
- 修复 cookie 无法在 window 下的 IE 正常工作
- GetInt 函数当获取不存在的变量是返回 nil 错误
- 增加更多的手机验证码方式
- 修复路由的匹配问题
- panic 返回 http 200
- redis session 引起数据库设置错误
- https 和 http 直接的 session 无法共享
- memcache session 引擎当没有数据的时候返回错误
beego 1.4.3
新功能:
- ORM 数据库创建和修改的时候支持 default 设置
- 改进日志文件行数统计
- session ledis 支持选择数据库
- session redis 支持选择数据库
- cache redis 支持选择数据库
- UrlFor 支持任意类型的参数
- controller 中 GetInt/GetString 等 Get 系列函数支持默认值, 例如:GetInt(“a”,12)
- 增加 CompareNot/NotNil 模板函数
- 支持 Controller 定义错误处理,更多请参考 controller Error
- ParseForm 增加支持 slices
- 改进 ORM interface,可以模拟 interface
bugfix:
- context subdomain 获取的子域名不正确
- beego.AppConfig.Strings 当数据为空时判定不正确
- utils/pagination 修复不能修改分页属性
- 路由处理中如果请求的 URL 是空导致 crash 的问题
- adminui 中 task 点击无法执行
- CGI 模式退出进程后 Socket 文件没有删除
beego 1.4.2
新功能:
- 增加了 SQL 构造器,参考了 ZEND 框架的 ORM
- Controller 获取参数增加了 GetInt(), GetInt8(), GetInt16(), GetInt32(), GetInt64()
- 优化日志提示,增加日志输出过滤设置 FilterHandler,默认静态文件不输出匹配日志
- 静态目录支持 index.html 输出,静态目录自动增加 /
- flash 支持 success 和 set 函数,支持各种一次性的数据
- 路由支持大小写忽略设置,RouterCaseSensitive,默认是大小写敏感的 URL,根据用户注册的URL进行匹配
配置文件支持自定义的变量获取,beego.AppConfig.String(“myvar”) 在 dev 模式下返回456,在其他模式下返回 123
runmode = dev myvar = 123 [dev] myvar = 456
ini 配置文件支持 include 语法,在配置文件中允许 include 其他配置文件:
appname = btest include b.conf
utils 下增加分页组件,可以方便用户编写分页相关的应用。
- 增加 BEEGO_RUNMODE 环境变量,用户在部署的时候只要通过改变量方便切换应用的不同模式
- toolbox 增加获取 statistic 的 Json 函数
- utils 下的 mail 发送内嵌附件发送
- 允许用户通过标准 IO 开启 fastcgi
- redis Session 引擎,采用 SETEX 命令兼容老版本的 redis
- RenderForm 支持 html id 和 class,使用 id 和 class tag
- ini 配置文件支持 BOM 头
- Session 增加新的引擎 ledis
- 改进 httplib 文件上传,采用了 io.Pipe 支持超大文件上传
- 支持应用启动直接绑定到 TCP4 地址上,Go 默认是绑定到 ipv6,增加配置参数 ListenTCP4
- 表单数据渲染支持 off/on/yes/no/1/0 解析到 bool,支持 time 格式的解析
- 简化了 SessionID 的生成,不再采用 hmac_sha1 算法,直接通过 golang 内置的 rand 获取
bugfix:
- 模拟 PUT 和 DELETE 时,_method 的值没有大写,导致 XSRF 验证失败
- cache 如果在 StartAndGC 初始化失败时,没有返回错误信息
- httplib 修复 User-Agent 设置不起作用
- DelStaticPath 优化/处理
- 静态目录多个的时候,文件只会在第一个静态目录找
- Filter 函数在 AfterExec 和 FinishRouter 之后多个 Filter 不能执行的问题
- 修复在请求方法是模拟的 _method 是 PUT 或者 DELETE 的时候无法正确路由
- 修复了 mime 没有初始化的问题
- log 输出文件以及行号不正确
- httplib 修复了当只有一个文件上传一个参数是不能发送的问题
- 改进了 Abort 的输出信息,之前如果是没有定义的错误信息不会输出
- 修复 namespace 循环嵌套中,如果外层没有 Filter 的情况下内层 Filter 无法添加的问题
- 路由包含多层参数时,路由匹配出错 #824
- 注释路由,如果存在多个 namespace 的时候,一个更新,另一个信息丢失 #770
- urlfor函数调用多余 {{placeholder}} 问题 #759
beego 1.4.1
主要更新:
- context.Input.Url 获取 path 信息,去除了域名,scheme 等信息
- 增加插件 apiauth,模拟 AWS 的加密请求
- 精简 debug 输出的路由信息
- orm 字段支持指针类型
- 改进了 httplib 功能,增加了 BasicAuth,多次请求缓存等功能
bugfix:
- _method 模拟请求 put 和 delete,参数大小写不统一
- 路由 . 和其他路由正则混用情况下无法解析
beego 1.4.0
这个版本整整憋了两个月时间,主要是我们真的做了好多功能性上面的改进,这里要感谢所有给 beego 贡献的用户,也感谢给 beego 持续提各种改进意见的用户,下面是我们这次改进的特性
bee 工具的完整性改进,bee 现在支持了如下功能:
bee api 直接从数据库读取数据库表,一键生成 API 应用带文档,详细介绍看视频:http://www.tudou.com/programs/view/aM7iKLlBlrU/
bee generate 命令,这个是新增加的命令,可以用来自动化生成代码,主要有如下子命令:
scaffold 类似其他框架的脚手架功能,生成 controller、model、view、migration
model 生成 CRUD 的 model
controller 生成 CRUD 的 controller
view 生成 CRUD 的 view 文件,内容为空,需要用户自己做 UI 界面
migration 生成 migration 文件
appcode 从数据库根据表结构生成 model、controller、router
docs 从 controller 注释自动化生成 swagger 文档
bee migrate 命令,执行 migration,支持如下子命令
migrate 执行所有新的 migration
rollback 回滚最后一次执行的 migration
reset 回滚所有的 migration
refresh 回滚所有的 migration 并从头执行全部的 migration
- bee run改进,默认支持了 watchall 功能,增加了两个参数 gendoc 和 downdoc
config 模块增加新的接口,现在 config 模块支持如下接口,支持直接保存文件:
type ConfigContainer interface {
Set(key, val string) error // support section::key type in given key when using ini type.
String(key string) string // support section::key type in key string when using ini and json type; Int,Int64,Bool,Float,DIY are same.
Strings(key string) []string //get string slice
Int(key string) (int, error)
Int64(key string) (int64, error)
Bool(key string) (bool, error)
Float(key string) (float64, error)
DefaultString(key string, defaultval string) string // support section::key type in key string when using ini and json type; Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
}
middleware中支持另一种 i18n 的支持:
I18N = middleware.NewLocale("conf/i18n.conf", beego.AppConfig.String("language"))
配置文件如下:
{
"E-mail Address": {
"en": "E-mail Address",
"zh": "邮箱地址",
"vn": "อีเมล"
},
"Username": {
"en": "Ussername",
"zh": "用户名",
"vn": "tên truy nhập"
}
}
使用如下:
I18N.Translate("username", "vn")
namespace前缀支持正则:
beego.NewNamespace("/v1/:uid",
beego.NSNamespace("/customer",
beego.NSInclude(
&controllers.CustomerController{},
&controllers.CustomerCookieCheckerController{},
),
),
)
cache 和 session 模块的 memcache、redis 引擎修改到最新版本的驱动
增加开发打印路由调试功能:
2014/08/22 09:55:40 [I] | GET | / | 7.660221504s | match | / |
2014/08/22 09:55:40 [I] | GET | / | 13.421869836s | match | / |
2014/08/22 09:55:40 [I] | GET | / | 1.726185752s | match | / |
2014/08/22 09:55:40 [I] | GET | /user/login| 7.494079ms | match | /user/login |
log 的等级符合 RFC5424 规范
静态文件处理支持 robots.txt,用户放在 static 目录下即可
增加和简化 plugins 功能:
auth 支持 basicauth,详细使用请看 https://godoc.org/github.com/beego/beego/plugins/auth cors 支持跨站调用,详细使用请看 https://godoc.org/github.com/beego/beego/plugins/cors
新增了 AdminUI,用户在 EnableAdmin 的情况下,可以通过界面简单地获取当前应用的各种状态,同时可以很容易的调试性能,监控系统,执行任务,获取配置等
session 配置现在支持设置 cookie domain
新增 migration 包,支持 migration 的功能
getconfg 方法改为 public 方法,用户就可以通过改方法获取相应 runmode 下的配置文件
改进 httplib 的方法支持 SetAgent 和 BasicAuth 的请求,httplib 支持请求一次,读取多次
修复 bug:
- file session 在部分情况下内容消失问题
- docs 自动化生成,文件不更新
- 路由 namespace 的前缀不支持
- orm 修正 detect engine
- 修复 captcha 里面当用户验证码输入长度不对时不进行更新
- 调用 setstatus 之后后面调用的 setHeader 全部无效的问题
- 修复 smtp 发送邮件需要验证的情况
- 修复 utils 下 safemap 的 items 问题
- 修复 geturl 函数当参数多个时不带?的问题
beego 1.3.0
经过了一个多月的开发,我们很高兴的宣布,beego 1.3.0来了,这个版本我们做了非常多好玩并且有用的功能,升级请看升级指南
路由重写
这一次路由进行了全部改造,从之前的三个路由模式,改成了 tree 路由,第一性能得到了提升,第二路由支持的格式更加丰富,第三路由更加符合我们的思考方式,
例如现在注册如下路由规则:
/user/astaxie
/user/:username
如果你的访问地址是 /user/astaxie
,那么优先匹配固定的路由,也就是第一条,如果访问是 /user/slene
,那么就匹配第二个,和你注册的路由的先后顺序无关
namespace 更优雅
设计 namespace 主要是为了大家模块化设计的,之前是采用了类似 jQuery 的链式方式,当然新版本也是支持的,但是由于 gofmt 的格式无法很直观的看出来整个路由的目录结构,所以我采用了多参数注册方式,现在看上去就更加的优雅:
ns :=
beego.NewNamespace("/v1",
beego.NSNamespace("/shop",
beego.NSGet("/:id", func(ctx *context.Context) {
ctx.Output.Body([]byte("shopinfo"))
}),
),
beego.NSNamespace("/order",
beego.NSGet("/:id", func(ctx *context.Context) {
ctx.Output.Body([]byte("orderinfo"))
}),
),
beego.NSNamespace("/crm",
beego.NSGet("/:id", func(ctx *context.Context) {
ctx.Output.Body([]byte("crminfo"))
}),
),
)
更多详细信息请参考文档:namespace
注解路由
// CMS API
type CMSController struct {
beego.Controller
}
func (c *CMSController) URLMapping() {
c.Mapping("StaticBlock", c.StaticBlock)
c.Mapping("AllBlock", c.AllBlock)
}
// @router /staticblock/:key [get]
func (this *CMSController) StaticBlock() {
}
// @router /all/:key [get]
func (this *CMSController) AllBlock() {
}
更多请参考文档:注解路由
自动化文档
自动化文档一直是我梦想中的一个功能,这次借着公司的项目终于实现了出来,我说过 beego 不仅仅要让开发 API 快,而且让使用 API 的用户也能快速的使用我们开发的 API,这个就是我开发这个项目的初衷。
可以通过注释自动化的生成文档,并且在线测试,详细的请看下面的截图
而且可以通过文档进行 API 的测试:
更多请参考文档:自动化文档
config 支持不同模式的配置
在配置文件里面支持 section,可以有不同的 Runmode 的配置,默认优先读取 runmode 下的配置信息,例如下面的配置文件:
appname = beepkg
httpaddr = "127.0.0.1"
httpport = 9090
runmode ="dev"
autorender = false
autorecover = false
viewspath = "myview"
[dev]
httpport = 8080
[prod]
httpport = 8088
[test]
httpport = 8888
上面的配置文件就是在不同的 runmode 下解析不同的配置,例如在 dev 模式下,httpport 是 8080,在 prod 模式下是 8088,在 test 模式下是 8888。其他配置文件同理。解析的时候优先解析 runmode 模式的配置,然后解析默认的配置。
支持双向的 SSL 认证
config := tls.Config{
ClientAuth: tls.RequireAndVerifyClientCert,
Certificates: []tls.Certificate{cert},
ClientCAs: pool,
}
config.Rand = rand.Reader
beego.BeeApp.Server.TLSConfig = &config
beego.Run支持带参数
beego.Run() 默认执行HttpPort
beego.Run(“:8089”)
beego.Run(“127.0.0.1:8089”)
XSRFKEY 的 token 从 15 个字符增加到 32 个字符,增强安全性
删除热更新
模板函数增加 Config,可以方便的在模板中获取配置信息
{{config returnType key defaultValue}}
{{config "int" "httpport" 8080}}
httplib 支持 cookiejar 功能,感谢 curvesft
orm 时间格式,如果为空就设置为 nil,感谢 JessonChan
config 模块支持 json 解析就一个 array 格式,感谢 chrisport
bug fix
- 静态文件目录循环跳转
- fix typo
beego 1.2.0
大家好,经过我们一个多月的努力,今天我们发布一个很帅的版本,之前性能测试框架出来 beego 已经跃居 Go 框架第一了,虽然这不是我们的目标,我们的目标是做最好用,最易用的框架. http://www.techempower.com/benchmarks/#section=data-r9&hw=i7&test=json 但是这个版本我们还是在性能和易用性上面做了很多改进.应该说性能更加的接近 Go 原生应用.
新特性:
1. namespace 支持
beego.NewNamespace("/v1").
Filter("before", auth).
Get("/notallowed", func(ctx *context.Context) {
ctx.Output.Body([]byte("notAllowed"))
}).
Router("/version", &AdminController{}, "get:ShowAPIVersion").
Router("/changepassword", &UserController{}).
Namespace(
beego.NewNamespace("/shop").
Filter("before", sentry).
Get("/:id", func(ctx *context.Context) {
ctx.Output.Body([]byte("notAllowed"))
}))
上面这个代码支持了如下这样的请求URL
- GET /v1/notallowed
- GET /v1/version
- GET /v1/changepassword
- POST /v1/changepassword
- GET /v1/shop/123
而且还支持前置过滤,条件判断,无限嵌套 namespace
2. beego 支持更加自由化的路由方式
RESTful的自定义函数
- beego.Get(router, beego.FilterFunc)
- beego.Post(router, beego.FilterFunc)
- beego.Put(router, beego.FilterFunc)
- beego.Head(router, beego.FilterFunc)
- beego.Options(router, beego.FilterFunc)
- beego.Delete(router, beego.FilterFunc)
beego.Get("/user", func(ctx *context.Context) {
ctx.Output.Body([]byte("Get userlist"))
})
更加自由度的 Handler
- beego.Handler(router, http.Handler)
可以很容易的集成其他服务
import (
"http"
"github.com/gorilla/rpc"
"github.com/gorilla/rpc/json"
)
func init() {
s := rpc.NewServer()
s.RegisterCodec(json.NewCodec(), "application/json")
s.RegisterService(new(HelloService), "")
beego.Handler("/rpc", s)
}
3. 支持从用户请求中直接数据 bind 到指定的对象
例如请求地址如下
?id=123&isok=true&ft=1.2&ol[0]=1&ol[1]=2&ul[]=str&ul[]=array&user.Name=astaxie
var id int
ctx.Input.Bind(&id, "id") //id ==123
var isok bool
ctx.Input.Bind(&isok, "isok") //isok ==true
var ft float64
ctx.Input.Bind(&ft, "ft") //ft ==1.2
ol := make([]int, 0, 2)
ctx.Input.Bind(&ol, "ol") //ol ==[1 2]
ul := make([]string, 0, 2)
ctx.Input.Bind(&ul, "ul") //ul ==[str array]
user struct{Name}
ctx.Input.Bind(&user, "user") //user =={Name:"astaxie"}
4. 优化解析 form 的流程,让性能更加提升
5. 增加更多地 testcase 进行自动化测试
6. admin 管理模块所有的增加可点击的链接,方便直接查询
7. session 的除了 memory 之外的引擎支持 struct 存储
8. httplib 支持文件直接上传接口
b:=httplib.Post("http://beego.me/")
b.Param("username","astaxie")
b.Param("password","123456")
b.PostFile("uploadfile1", "httplib.pdf")
b.PostFile("uploadfile2", "httplib.txt")
str, err := b.String()
if err != nil {
t.Fatal(err)
}
httplib 支持自定义协议版本
9. ORM 支持 struct 中有 unexport 的字段
10. XSRF 支持 controller 级别控制是否启用, 之前 XSRF 是全局设置只要开启了就会影响所有的 POST PUT DELET 请求,但是项目中可能 API 和页面共存的情况,页面可能不需要类似的 XSRF,因此支持在 Prepare 函数中设置值来控制 controller 是否启用 XSRF. 默认是 true,也就是根据全局的来执行.用户可以在 prepare 中设置是否关闭.
func (a *AdminController) Prepare(){
a.EnableXSRF = false
}
11. controller 支持 ServeFormatted 函数,支持根据请求 Accept 来判断是调用 ServeJson 还是 ServeXML
12. session 提供 memcache 引擎
13. Context 中的 Download 函数支持自定义文件名提供下载
bug 修复
- session 的 Cookie 引擎修复无法设置过期的 bug
- 修复 flash 数据的存储和解析问题
- 修复所有 go vet 出现的问题
- 修复 ParseFormOrMulitForm 问题
- 修复只有 POST 才能解析 raw body,现在支持除了 GET 和 HEAD 之外的其他请求
- config 模块修复 xml 和 yaml 无法解析的问题
beego 1.1.4
发布一个紧急的版本, beego 存在一个严重的安全漏洞,请大家更新到最新版本. 顺便把最近做的一起发布了
紧急修复一个安全漏洞,稍后会在 beego/SECURITY.md 公布详细的情况
静态文件处理独立到文件
第三方依赖库移除,目前如果你使用 session/cache/config,使用的是依赖第三方库的,那么现在都移到了子目录,如果你想使用这些就需要在使用的地方采用 mysql 类似的方式引入
import (
"github.com/beego/beego/v2"
_ "github.com/beego/beego/v2/session/mysql"
)
修改部分导出的函数为 private,因为外部不需要调用
优化 formparse 的过程,根据不同的 content-type 进行解析
发布时间: 2014-04-08
beego 1.1.3
这是一个 hotfix 的版本,主要是修复了以下 bug
console 日志输出,如果不设置配置文件,不能正常输出
支持了 go run main.go,但是 main.go 没有遵循 beego 的目录结构,自定义了配置文件或者不存在配置文件,就会 panic 找不到 app.conf.
支持了在 go test 中解析配置,但是实际上调用 TestBeegoInit 无法解析配置文件
发布时间: 2014-04-04
beego 1.1.2
beego 1.1.2 版本发布,这个版本主要是一些改进:
增加 ExceptMethodAppend 函数,支持 autorouter 的时候过滤一些函数
支持自定义 FlashName,FlashSeperator
ORM 支持自定义的类型,例如 type MyInt int 这种
修复验证模块返回自定义验证信息
改进 logs 模块, 增加 Init 处理 error,设置一些不必要的 public 函数为 private
增加 PostgreSQL 的 session 引擎
logs 模块,支持输出调用的文件名和行号,增加设置函数 EnableFuncCallDepth,默认关闭
修改 session 模块中 Cookie 引擎的一个隐藏 bug
模板解析错误的时候,提示语进行了改进
允许用户通过 Filter 修改 Context,跳过 beego 的路由查找方法,直接使用自己的路由规则.增加参数 RunController 和 RunMethod
支持 go run main.go 执行 beego 的应用
支持 go test 执行测试用例,无法读取配置文件,模板的问题,增加 TestBeegoInit 函数调用.
发布时间: 2014-04-03
beego 1.1.1
这个版本主要是一些 bug 的修复和增加新功能
session 模块 file 引擎无法删除文件,不断刷新引起的文件读取失败问题
文件缓存无法读取 struct,改进 gob 自动化注册
session 模块增加新引擎 couchbase
httplib 支持设置 transport 和 proxy
改进 context 中 Cookie 函数,默认支持 httponly,以及其他一些默认参数行为
验证模块的改进,支持更多地手机号码
getstrings 函数行为也改成 getstring 一样,不需要自己 parseform
session 模块 redis 引擎,在连接失败的情况下返回错误
修复无法添加 GroupRouters 的 bug 问题
改进多个静态文件的一些潜在 bug,路径匹配问题,以及自动跳转静态目录显示.
ORM 增加 GetDB 获取已连接的 *sql.DB
ORM 增加 ResetModelCache 重置已注册缓存的模型 struct,方便写测试
ORM 支持 between
ORM 支持 sql.Null* 类型
修改 auto_now_add,用户有自定义值时跳过自动设置时间
发布时间: 2014-03-12
beego 1.1.0
这个版本增加了一些新特性,修复了一些 bug
新特性
- 支持 AddAPPStartHook 函数
- 支持插件模式,支持 AddGroupRouter,用于插件路由设置
- response 支持 HiJacker接口
- AddFilter 支持批量匹配
- session 重构,支持 Cookie 引擎
- 主流 ORM 性能测试
- config 增加 strings 接口,允许设置
- 支持 controller 级别的模板渲染控制
- 增加插件 basicauth,可以方便的使用该插件实现认证
436 一次插入多个对象
384 query map to struct
bugfix
- 修复 FileCache的bug
- websocket 的例子修正引用库
- 当发生程序内部错误时。http 的 status 默认修改为 500 而不是 200
- gmfim map in memzipfile.go file should use some synchronization mechanism (for example sync.RWMutex) otherwise it errors sometimes.
440 on_delete 不自动删除的问题
441 时区问题
发布时间: 2014-02-10
beego 1.0.0
经过了四个多月的重构开发,beego 终于发布了第一个正式稳定版本。这个版本我们进行了重构,同时针对很多细节进行了改进。下面列一些主要的改进功能:
模块化的设计,现在基本上 beego 做成一个轻量的组装框架,重模块的设计,目前实现了cache、config、logs、sessions、httplibs、toolbox、orm、context 等八个模块,以后可能会更多。用户可以直接引用这些模块应用于自己的应用中,不仅仅局限于Web应用,beego 用户中有应用 logs、config、cache 这些模块到页游、手游中。
工程化的设计,部署项目之后,经常需要进行对线上程序进行各种信息的统计和分析,统计包括 QPS,分析包括 GC、内存使用量、CPU,如果出现问题的时候我们还希望通过 profile 来调试,那么 beego 都为你考虑到了这些,集成了监控模块,默认是关闭的,用户可以开启,并在另一个端口监听,通过 http://127.0.0.1:8088/ 访问。
详细的文档,这个版本的文档全部是新写的,在之前文档用户的各方面反馈之后,进行了很多细节上面的改进,目前文档中英文版本都已经完成,中英文文档的评论分离,针对不同的用户群交流。
丰富的示例,这一次更新我们开发组写了三个例子,聊天室、短域名、todo 任务三个比较有典型意义的例子。让用户在熟悉 beego 之前有一个更深入的了解。
全新设计的官方网站,这一次我们通过社区获得了很多人的帮助,logo 设计,网站 UI 的改进。
越来越多的用户,官方网站列举了一些典型的用户,都是一些比较大的公司,他们内部都在使用beego开发对外的 API 应用,说明 beego 是得到了线上项目验证的框架。
越来越活跃的社区,在 github 上面目前已经差不多有 390 个的 issue,贡献者超过 36 个,commit 超过了 700 个,Google groups 目前还在稳步发展中。
周边产品越来越多,基于beego的开源产品也越来越多,例如 cms 系统,https://github.com/insionng/toropress 例如管理后台系统,https://github.com/beego/admin
beego 的辅助工具越来越强大,bee 工具是专门辅助用户开发 beego 应用的,可以快速的创建应用,动态编译,打包部署等
发布时间: 2013-12-19