Go 应用框架 beego 1.7.0,新增改进功能

简介:

beego 1.7.0 版本发布了。beego是一个用Go开发的应用框架,思路来自于tornado,路由设计来源于sinatra

新增改进功能:

  1. Filter访问速度提升7.5倍以上 #1799
  2. Gzip压缩的时候支持不同的level #1808
  3. ORM PK支持负数 #1810
  4. ORM 支持自定义自增ID的值 #1826
  5. Context 下载文件函数改进:下载文件之前先检查是否存在 #1827
  6. 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")
}

image

  1. session增加Log,一旦错误发生可以记录日志. #1833
  2. logs包添加两个public函数,EnableFuncCallDepth和SetLogFuncCallDepth, 用来设置函数的调用层级. #1837
  3. 支持go run运行beego的项目代码 #1840
  4. 添加ExecuteTemplate函数,这样用户就可以通过这种方式访问template,而不是直接访问map,因为map有并发读写问题 #1848
  5. ORM 字段支持time类型 #1856
  6. ORM One接口只获取一条 #1874
  7. ORM支持json jsonb类型 #1875
  8. ORM默认使用text类型 #1879
  9. session配置三个配置,EnableSidInHttpHeader EnableSidInUrlQuery SessionNameInHttpHeader,
    允许用户可以在http头和URL中带sid #1897
  10. 自动化路由改进生成的文件名,之前太长了 #1924
  11. 支持复杂的模板引擎. 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
    })
#1940
  1. session引擎支持ssdb #1953
  2. RenderForm支持输出required #1993
  3. 让打印的beego日志更加美观 #1997
    image
  4. ORM支持struct中带有time.Time指针 #2006
  5. Controller中增加 TplPrefix 这样就可以在baseController制定读取模板的前缀目录 #2030
  6. jsonb函数中增加js函数的判断,避免函数不存在时候出错. #2045
  7. ORM增加InsertOrUpdate函数 #2053
  8. Filter函数增加重置参数的参数. 因为beego.InsertFilter("*", beego.BeforeStatic, RedirectHTTP)
    的时候,参数会赋值给:splat,从而影响后续如果路由里面也有想用的路由,

那么就会引起冲突,因此增加这样的函数以方便用户重置。 #2085

  1. session包配置采用对象初始化,而抛弃传递json的方式. 如果独立使用session包的可能会引起兼容性问题#2096
  2. Swagger迁移到2.0版本,现在生产的代码无需依赖API,直接生产swagger.json

bugfix:

  1. 静态路由中/m自动跳转到/m/ #1792
  2. test的时候解析配置文件出错 #1794
  3. 文件rotato的时候产生race condition #1803
  4. 修复multiple response.WriteHeader calls的错误 #1805
  5. ORM 如果主键是uint的时候panic #1828
  6. 日志rotate的时候如果当前时间小于2000 panic #
  7. context重用导致XSRF重用#1863
  8. ORM InsertMulti的时候当是*类型时panic #1882
  9. task中任务在很微小的时间内可能存在执行多次的情况 #1909
  10. IE浏览器下载文件名混乱 #1912
  11. ORM DISTINCT实现 #1938
  12. Logs包里面设置文件的permit时候,int无法设置. #1948 #2003
  13. QueryRow 和 QueryRows 查询获取数据后外键字段不填充值 #1964
  14. 当beego应用跑在代理之后的时候,scheme通过X-Forwarded-Proto获取 #2050
  15. 静态文件访问目录时候跳转到目录/的时候自动带上参数 #2064

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

相关文章
|
10天前
|
Go API 数据库
【Go 语言专栏】Go 语言中的 ORM 框架使用与比较
【4月更文挑战第30天】本文对比分析了Go语言中的常见ORM框架:GORM、XORM和BeeORM。GORM功能强大,支持复杂查询和关联关系处理,但可能影响性能;XORM以其简单易用和高性能受到青睐,但文档不全;BeeORM简洁高效,适合基础应用场景。选择ORM应考虑功能、性能、易用性和社区支持,根据项目需求进行评估和选择,以提升开发效率和应用性能。
|
10天前
|
存储 缓存 NoSQL
【Go语言专栏】Go语言中的Redis操作与缓存应用
【4月更文挑战第30天】本文探讨了在Go语言中使用Redis进行操作和缓存应用的方法。文章介绍了Redis作为高性能键值存储系统,用于提升应用性能。推荐使用`go-redis/redis`库,示例代码展示了连接、设置、获取和删除键值对的基本操作。文章还详细阐述了缓存应用的步骤及常见缓存策略,包括缓存穿透、缓存击穿和缓存雪崩的解决方案。利用Redis和合适策略可有效优化应用性能。
|
10天前
|
网络协议 Java Go
【Go语言专栏】Go语言中的WebSocket实时通信应用
【4月更文挑战第30天】Go语言(Golang)是Google开发的编程语言,适用于云计算、微服务等领域。本文介绍了WebSocket,一种实现浏览器与服务器全双工通信的协议,其特点是实时性、全双工和轻量级。在Go中实现WebSocket,可以使用gorilla/websocket库。示例展示了如何创建服务器端和客户端,实现消息的收发。WebSocket广泛应用于聊天、游戏、通知推送和实时数据同步等场景。学习Go语言中的WebSocket对于开发实时通信应用至关重要。
|
4天前
|
分布式计算 Java Go
Golang深入浅出之-Go语言中的分布式计算框架Apache Beam
【5月更文挑战第6天】Apache Beam是一个统一的编程模型,适用于批处理和流处理,主要支持Java和Python,但也提供实验性的Go SDK。Go SDK的基本概念包括`PTransform`、`PCollection`和`Pipeline`。在使用中,需注意类型转换、窗口和触发器配置、资源管理和错误处理。尽管Go SDK文档有限,生态系统尚不成熟,且性能可能不高,但它仍为分布式计算提供了可移植的解决方案。通过理解和掌握Beam模型,开发者能编写高效的数据处理程序。
133 1
|
5天前
|
负载均衡 监控 Go
Golang深入浅出之-Go语言中的服务网格(Service Mesh)原理与应用
【5月更文挑战第5天】服务网格是处理服务间通信的基础设施层,常由数据平面(代理,如Envoy)和控制平面(管理配置)组成。本文讨论了服务发现、负载均衡和追踪等常见问题及其解决方案,并展示了使用Go语言实现Envoy sidecar配置的例子,强调Go语言在构建服务网格中的优势。服务网格能提升微服务的管理和可观测性,正确应对问题能构建更健壮的分布式系统。
26 1
|
7天前
|
安全 Go
Golang深入浅出之-Go语言中的并发安全队列:实现与应用
【5月更文挑战第3天】本文探讨了Go语言中的并发安全队列,它是构建高性能并发系统的基础。文章介绍了两种实现方法:1) 使用`sync.Mutex`保护的简单队列,通过加锁解锁确保数据一致性;2) 使用通道(Channel)实现无锁队列,天生并发安全。同时,文中列举了并发编程中常见的死锁、数据竞争和通道阻塞问题,并给出了避免这些问题的策略,如明确锁边界、使用带缓冲通道、优雅处理关闭以及利用Go标准库。
23 5
|
9天前
|
JSON 监控 安全
Golang深入浅出之-Go语言中的反射(reflect):原理与实战应用
【5月更文挑战第1天】Go语言的反射允许运行时检查和修改结构,主要通过`reflect`包的`Type`和`Value`实现。然而,滥用反射可能导致代码复杂和性能下降。要安全使用,应注意避免过度使用,始终进行类型检查,并尊重封装。反射的应用包括动态接口实现、JSON序列化和元编程。理解反射原理并谨慎使用是关键,应尽量保持代码静态类型。
21 2
|
10天前
|
存储 缓存 监控
【Go语言专栏】Go语言应用的性能调优实践
【4月更文挑战第30天】本文介绍了Go语言应用的性能调优技巧,包括使用`pprof`进行性能分析、选择正确算法与数据结构、减少内存分配、优化并发及避免阻塞操作、选用合适锁机制。此外,文章还提到了编译选项如`-trimpath`和`-ldflags`,以及系统资源和环境调优。通过实例展示了代码优化、并发处理和锁的使用。最后,推荐了进一步学习资源,鼓励读者深入探索Go语言的性能优化。
|
10天前
|
存储 NoSQL Go
【Go语言专栏】Go语言中的MongoDB操作与NoSQL应用
【4月更文挑战第30天】本文介绍了Go语言中操作MongoDB的方法和NoSQL应用的优势。MongoDB作为流行的NoSQL数据库,以其文档型数据模型、高性能和可扩展性被广泛应用。在Go语言中,通过mongo-go-driver库可轻松实现与MongoDB的连接及插入、查询、更新和删除等操作。MongoDB在NoSQL应用中的优点包括灵活的数据模型、高性能、高可用性和易于扩展,使其成为处理大规模数据和高并发场景的理想选择。
|
10天前
|
缓存 监控 前端开发
【Go 语言专栏】Go 语言中的 WebSocket 实时通信应用
【4月更文挑战第30天】本文探讨了Go语言在WebSocket实时通信中的应用。WebSocket作为全双工通信协议,允许持续的双向通信。Go语言凭借其高效和并发特性,适合构建实时应用。文中概述了在Go中实现WebSocket的基本步骤,包括服务器和客户端的建立与通信,并列举了实时聊天、数据监控和在线协作等应用案例。同时,强调了消息格式、并发处理、错误处理和安全性的注意事项。通过数据压缩、缓存管理和连接管理等策略可优化性能。Go语言还能与数据库和前端框架结合,提升用户体验。总之,Go语言为WebSocket实时通信提供了强大支持,有望在更多领域发挥作用。