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.

目录
相关文章
|
6月前
|
JSON JavaScript 前端开发
Nodejs第一天
Nodejs第一天
|
存储 C语言 C++
软件开发入门教程网之C++ 日期 & 时间
软件开发入门教程网之C++ 日期 & 时间
|
存储 JSON Dubbo
花了一星期,自己写了个简单的RPC框架
花了一星期,自己写了个简单的RPC框架
132 0
花了一星期,自己写了个简单的RPC框架
|
中间件 API
GoFrame第三天
GoFrame第三天
229 0
GoFrame第三天
|
缓存 中间件 API
GoFrame第二天
GoFrame第二天
302 0
GoFrame第二天
GoFrame第四天
GoFrame第四天
222 0
GoFrame第四天
|
安全 NoSQL 数据库连接
GoFrame第五天
GoFrame第五天
238 0
GoFrame第五天
|
人工智能 自然语言处理 前端开发
程序老鸟C#学习:5天学会全部基础--第一天
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
230 0
|
弹性计算 缓存 Linux
第一天笔记
一.创建资源(实例) 二.远程连接ECS服务器 三.安装vsftpd 四.配置vsftpd 五.客户端测试
|
Java C# C++
C++学习笔记第一天:基础
前言 N年前学的C,经过VB、JAVA、JS、C#等后辈的轮番蹂躏,当初学的那点儿东西早就还给老师了 现在有了在桌面端实现 Native + Web 的初衷,需要利用CEF开源组件来封装这个Native 所以,还是要对C++有个基本的认识,否则连Debug都找不到入口   开始 首先,菜鸟教程走起:http://www.runoob.com/cplusplus/cpp-tutorial.html 从头开始:基本语法、数据类型、变量类型、各种运算符、循环语句、分支语句。
1221 0