发现了一款神仙级别的Go框架:GoFrame

简介: 最近发现了一款非常好用的基于go语言的web开发框架,非常适合PHP转Go的同学使用,在很多设计思想和使用上和PHP的Laravel框架非常像。

最近发现了一款非常好用的基于go语言的web开发框架,非常适合PHP转Go的同学使用,在很多设计思想和使用上和PHP的Laravel框架非常像。


今天就为大家简单介绍一下GoFrame的特点


官方介绍


GoFrame是一款模块化、高性能、企业级的Go基础开发框架。GoFrame不是一款WEB/RPC框架,而是一款通用性的基础开发框架,是Golang标准库的一个增强扩展级,包含通用核心的基础开发组件,优点是实战化、模块化、文档全面、模块丰富、易用性高、通用性强、面向团队。


我的使用体验


官方文档详细介绍了框架特点,我就不赘述了。

下面我以一个使用者和学习者的角度分享一下我的学习体会。


设计思想


设计思想是GoFrame框架的灵魂,同时对于使用者来讲,是不可或缺的内功心法。GoFrame有其独特的设计思想,理解了GoFrame的设计思想,您就理解了GoFrame的全部。


和PHP的Laravel一样,goframe的设计思想非常值得我们学习和借鉴。


学习建议


有基础的同学


有基础的同学,建议可以简单熟悉一下框架设计、操作一下快速开始,然后就重点阅读 核心组件

尤其是数据库ORM需要重点看一下,熟悉Laravel Eloquent的同学看起来应该比较轻松,很多使用和习惯是比较像的。

下面我举个实例让大家体会一下,从一些细节设计上我们能明显感觉到设计者对PHP转go开发者的友好。


对象管理相关:


Array也是切片的别名,猜测是为了迎合PHP转go的使用习惯,PHP的array和golang的slice切片更像,因为go的数组的固定长度的。


type(
    Var = gvar.Var //是一个通用的变量,类似泛型
    Ctx = context.Context //context.Context的别名
)
//Map是对原生map的key value约定好了类型,起的的别名
type(
    Map = map[string]interface{} 
    MapAnyAny  = map[interface{}]interface{} // MapAnyAny is alias of frequently-used map type map[interface{}]interface{}.
  MapAnyStr  = map[interface{}]string      // MapAnyStr is alias of frequently-used map type map[interface{}]string.
  MapAnyInt  = map[interface{}]int         // MapAnyInt is alias of frequently-used map type map[interface{}]int.
  MapStrAny  = map[string]interface{}      // MapStrAny is alias of frequently-used map type map[string]interface{}.
  MapStrStr  = map[string]string           // MapStrStr is alias of frequently-used map type map[string]string.
  MapStrInt  = map[string]int              // MapStrInt is alias of frequently-used map type map[string]int.
  MapIntAny  = map[int]interface{}         // MapIntAny is alias of frequently-used map type map[int]interface{}.
        .
        .
        .
)
//List是map类型的切片
type (
    List = []Map
  ListAnyAny  = []MapAnyAny  // ListAnyAny is alias of frequently-used slice type []MapAnyAny.
  ListAnyStr  = []MapAnyStr  // ListAnyStr is alias of frequently-used slice type []MapAnyStr.
  ListAnyInt  = []MapAnyInt  // ListAnyInt is alias of frequently-used slice type []MapAnyInt.
  ListStrAny  = []MapStrAny  // ListStrAny is alias of frequently-used slice type []MapStrAny.
  ListStrStr  = []MapStrStr  // ListStrStr is alias of frequently-used slice type []MapStrStr.
  ListStrInt  = []MapStrInt  // ListStrInt is alias of frequently-used 
        .
        .
        .
)
//Slice就是切片的别名
type(
  Slice    = []interface{} // Slice is alias of frequently-used slice type []interface{}.
  SliceAny = []interface{} // SliceAny is alias of frequently-used slice type []interface{}.
  SliceStr = []string      // SliceStr is alias of frequently-used slice type []string.
  SliceInt = []int         // SliceInt is alias of frequently-used slice type []int.
)
//Array也是切片的别名,猜测是为了迎合PHP转go的使用习惯,PHP的array和golang的切片更像,因为go的数组的固定长度的。
type(
  Array    = []interface{} // Array is alias of frequently-used slice type []interface{}.
  ArrayAny = []interface{} // ArrayAny is alias of frequently-used slice type []interface{}.
  ArrayStr = []string      // ArrayStr is alias of frequently-used slice type []string.
  ArrayInt = []int         // ArrayInt is alias of frequently-used slice type []int.
)


无基础的同学


无go语言基础的同学,我建议先学go的基础语法,安利一下我在掘金的GO语言学习专栏,目前已经有60多人关注了,然后再看goframe的框架。

因为只有搞清楚Go语言基础后,才能更好的理解goframe的优势和使用技巧。

就像我们做PHP的时候,一定是先学习PHP的基础语法,然后才学TP、Laravel这类框架的。

对于有PHP基础,只是没有go语言基础的同学来讲,转go还是比较轻松的。

可能只是不能像PHP那么灵活,那么随心所欲的写代码了,尝试一下GO语言苛刻的规范化开发也未尝不是一种享受。


官网地址


复制粘贴的重复工作我就不做了,更多内容建议大家查看下方的官网。

目前最新的2.0版本


小坑


在看文档过程中,我们不能很明显的知道当前文档的版本,这个问题我已经提交给社区了,目前的阅读建议是这样,我们把页面拉到最上面,点击左上角这里进行版本切换。


微信图片_20221112161221.jpg


公众号:程序员升级打怪之旅

微信号:wangzhongyang1993

相关文章
|
2月前
|
JSON Go API
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
|
3月前
|
Cloud Native JavaScript API
一文读懂云原生 go-zero 微服务框架
一文读懂云原生 go-zero 微服务框架
|
2月前
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
|
3月前
|
Go API 数据库
[go 面试] 分布式事务框架选择与实践
[go 面试] 分布式事务框架选择与实践
|
3月前
|
SQL JavaScript Go
Go Web 服务框架实现详解
Go Web 服务框架实现详解
|
3月前
|
存储 Prometheus 中间件
2020最佳人气项目之Go Web框架
2020最佳人气项目之Go Web框架
|
3月前
|
缓存 监控 中间件
构建高效的Go语言Web服务器:基于Fiber框架的性能优化实践
在追求极致性能的Web开发领域,Go语言(Golang)凭借其高效的并发处理能力、垃圾回收机制及简洁的语法赢得了广泛的青睐。本文不同于传统的性能优化教程,将深入剖析如何在Go语言环境下,利用Fiber这一高性能Web框架,通过精细化配置、并发策略调整及代码层面的微优化,构建出既快速又稳定的Web服务器。通过实际案例与性能测试数据对比,揭示一系列非直觉但极为有效的优化技巧,助力开发者在快节奏的互联网环境中抢占先机。
|
4月前
|
JSON 中间件 Go
Go语言Web框架Gin介绍
【7月更文挑战第19天】Gin是一个功能强大、高性能且易于使用的Go语言Web框架。它提供了路由、中间件、参数绑定等丰富的功能,帮助开发者快速构建高质量的Web应用。通过本文的介绍,你应该对Gin框架有了初步的了解,并能够使用它来开发简单的Web服务。随着你对Gin的深入学习和实践,你将能够利用它构建更复杂、更强大的Web应用。
|
3月前
|
API Go 数据安全/隐私保护
go-zero微服务框架的静态文件服务
【8月更文挑战第7天】`go-zero` 微服务框架支持多种静态文件服务实现方式。常用方法是利用 `Go` 标准库 `http.FileServer`。通过设置静态文件根目录并使用 `http.StripPrefix` 去除路径前缀,能确保 `/static/` 开头的请求正确返回文件。此外,结合 `go-zero` 的路由机制可更灵活地控制静态文件服务,例如仅在特定 API 路径 `/api/static` 下提供服务,从而实现精细化访问控制。
|
3月前
|
NoSQL Go API
简洁、轻量级的 Go API 框架
简洁、轻量级的 Go API 框架
49 0