GoFrame day1
前言
之前总结过gin的一些知识,同时也说过有时间会再开一个专栏讲讲GoFrame这个web框架,今天开始就来慢慢填坑
开始
环境安装
这里我默认大家最基础的go语言环境都已经配置好了,我的系统是ubuntu20,golang版本之前为了体验范型升级到了1.18.1
然后创建项目go mod init 项目名
,设置go mod的依赖require github.com/gogf/gf/v2 v2.0.6
,接着运行go mod tidy
自动配置
测试一下GoFrame环境是否安装成功
package main import "github.com/gogf/gf/v2" func main() { println("Hello Goframe") println(gf.VERSION) }
还没有结束,因为GoFrame默认是不支持热启动的,所以如果想更加简单地使用GoFrame还需要配置一下它的官方cli工具
根据自己的系统和版本下载对应的预编译文件,配置起来也很简单.以ubuntu为例,先设置中允许作为可执行文件,然后再命令行中输入sudo ./gf_xxxx_xxx install
一般都是存在/usr/bin下,想存在其他位置也可以,然后运行gf -v测试一下是否安装成功
gf run
可以热启动服务,下面写一个简单的服务然后用gf工具运行试试效果
package main import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" ) func main() { s := g.Server() s.BindHandler("/", func(r *ghttp.Request) { r.Response.Writeln("Welcome GoFrame") }) s.BindHandler("/hello", func(r *ghttp.Request) { r.Response.Writeln("Hello GoFrame") }) s.SetPort(8080) s.Run() } 复制代码
然后更改一下输出的内容,不用重启服务直接刷新页面
看看源码
以上面的例子来看看GoFrame框架到底在背后做了哪些事情?因为看过了不少框架的源码,大多数的框架所做的工作大体上是差不多的,所以在看源码之前大概猜测一下.首先从字面来看,g.Server()
实例化一个实现http请求的对象,可能GoFrame会丰富一些操作这也是各个框架的改进之处.然后s.BindHandler
就是绑定一个处理器,针对一个路由对应一个处理函数.下面就来具体看看一步步是怎么实现的.
g.Server是一个结构体,封装了http.Server而且添加了更丰富的特征.再来看看用到最多的路由处理器绑定的实现
首先对处理器函数检查,然后执行绑定处理器.将每一个创建的路由item(包括路由和对应的处理器函数)注册到路由树里.执行run的时候会首先调用Start()方法实现一些初始化和设置
可能很多人会好奇运行之后打印的一些日志以及那个路由表格是怎么得到的,其实仔细看就在dumpRouterMap()方法中.
设置了table的headers头部,然后通过遍历每个routes得到里面的信息,如处理器函数名,路由地址,对应的路由方法,中间件名…最后全部添加到table里面并render展示出来
结尾
今天简单布置一下GoFrame的基本环境,并且写了一个“Hello World”作为例子简单的分析了一下底层的一些逻辑,其实还是那句话框架大多都是大同小异的,只是有些功能更强大有些更灵活.接下来我也会慢慢更新这个专栏,一起学习GoFrame.