GoFrame第一天

简介: GoFrame第一天

GoFrame day1


前言


之前总结过gin的一些知识,同时也说过有时间会再开一个专栏讲讲GoFrame这个web框架,今天开始就来慢慢填坑


开始


环境安装


这里我默认大家最基础的go语言环境都已经配置好了,我的系统是ubuntu20,golang版本之前为了体验范型升级到了1.18.1

image.png

然后创建项目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)
}


image.png


还没有结束,因为GoFrame默认是不支持热启动的,所以如果想更加简单地使用GoFrame还需要配置一下它的官方cli工具


根据自己的系统和版本下载对应的预编译文件,配置起来也很简单.以ubuntu为例,先设置中允许作为可执行文件,然后再命令行中输入sudo ./gf_xxxx_xxx install

image.png

一般都是存在/usr/bin下,想存在其他位置也可以,然后运行gf -v测试一下是否安装成功

image.png

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()
}
复制代码


image.png


image.png

然后更改一下输出的内容,不用重启服务直接刷新页面


image.png

image.png

看看源码


以上面的例子来看看GoFrame框架到底在背后做了哪些事情?因为看过了不少框架的源码,大多数的框架所做的工作大体上是差不多的,所以在看源码之前大概猜测一下.首先从字面来看,g.Server()实例化一个实现http请求的对象,可能GoFrame会丰富一些操作这也是各个框架的改进之处.然后s.BindHandler就是绑定一个处理器,针对一个路由对应一个处理函数.下面就来具体看看一步步是怎么实现的.


image.png

image.png


g.Server是一个结构体,封装了http.Server而且添加了更丰富的特征.再来看看用到最多的路由处理器绑定的实现

image.png


首先对处理器函数检查,然后执行绑定处理器.将每一个创建的路由item(包括路由和对应的处理器函数)注册到路由树里.执行run的时候会首先调用Start()方法实现一些初始化和设置


image.png

可能很多人会好奇运行之后打印的一些日志以及那个路由表格是怎么得到的,其实仔细看就在dumpRouterMap()方法中.


image.png


设置了table的headers头部,然后通过遍历每个routes得到里面的信息,如处理器函数名,路由地址,对应的路由方法,中间件名…最后全部添加到table里面并render展示出来

image.png


结尾


今天简单布置一下GoFrame的基本环境,并且写了一个“Hello World”作为例子简单的分析了一下底层的一些逻辑,其实还是那句话框架大多都是大同小异的,只是有些功能更强大有些更灵活.接下来我也会慢慢更新这个专栏,一起学习GoFrame.

目录
相关文章
|
16天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
46 9
|
6月前
|
JSON JavaScript 前端开发
Nodejs第一天
Nodejs第一天
|
容器
重学JavaWeb第一天(上)
重学JavaWeb第一天
10360 1
|
前端开发 JavaScript 数据安全/隐私保护
重学JavaWeb第一天(下)
重学JavaWeb第一天
228 0
|
前端开发 JavaScript
Electron 实践第一天
Electron 实践第一天
111 0
Electron 实践第一天
|
中间件 API
GoFrame第三天
GoFrame第三天
235 0
GoFrame第三天
|
缓存 中间件 API
GoFrame第二天
GoFrame第二天
307 0
GoFrame第二天
GoFrame第四天
GoFrame第四天
227 0
GoFrame第四天
|
安全 NoSQL 数据库连接
GoFrame第五天
GoFrame第五天
241 0
GoFrame第五天
|
XML JSON 中间件
Gin框架第一天
Gin框架第一天
156 0
Gin框架第一天