朋友,你来晚了,不过没关系,我们的故事从现在开始,我们准备了一些使用指南,助你快速了解 GoFram
https://goframe.org/
快速开始
go版本限制
为保证框架的稳定性和安全性,GoFrame框架要求的最低的基础Go语言版本通常会比最新的Go语言版本低1~3个版本。
当前最新框架版本要求的最低Go语言版本:
golang版本 >= 1.20
安装
初始化go.mod:
go mod init hello
下载框架最新版本:
go get -u -v github.com/gogf/gf/v2
运行
我们尝试运行以下代码:
main.go
package main
import (
"fmt"
"github.com/gogf/gf/v2"
)
func main() {
fmt.Println("Hello GoFrame:", gf.VERSION)
}
Hello World
新建main.go文件
main.go
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.Write("Hello World!")
})
s.SetPort(8000)
s.Run()
}
配置go mod并安装依赖
go mod init main
go mod tidy
- 任何时候,您都可以通过 g.Server() 方法获得一个默认的 Server 对象,该方法采用单例模式设计, 也就是说,多次调用该方法,返回的是同一个 Server 对象。其中的g组件是框架提供的一个耦合组件,封装和初始化一些常用的组件对象,为业务项目提供便捷化的使用方式。
- 通过Server对象的BindHandler方法绑定路由以及路由函数。在本示例中,我们绑定了/路由,并指定路由函数返回Hello World。
- 在路由函数中,输入参数为当前请求对象r *ghttp.Request,该对象包含当前请求的上下文信息。在本示例中,我们通过r.Response返回对象直接Write返回结果信息。
通过SetPort方法设置当前Server监听端口。在本示例中,我们监听8000端口,如果在没有设置端口的情况下,它默认会监听一个随机的端口。 - 通过 Run() 方法阻塞执行 Server 的监听运行。
获取请求
直接获取请求参数
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.Writef(
"Hello %s! Your Age is %d",
r.Get("name", "unknown").String(),
r.Get("age").Int(),
)
})
s.SetPort(8000)
s.Run()
}
在GoFrame框架中,获取参数非常便捷。在本示例中,我们通过r.Get方法获取客户端提交的参数,该方法能够获取所有HTTP Method提交的参数, 比如Query String/Form/Body等,其内部将会根据客户端提交的类型自动识别解析,比如支持自动识别参数格式例如json/xml等。该方法的定义如下:
func (r *Request) Get(key string, def ...interface{
}) *gvar.Var
可以看到,Get方法接受两个参数,第一个为参数名称,第二个参数为非必须参数,表示默认值。返回结果为一个*gvar.Var对象,该对象为GoFrame框架 提供的运行时泛型对象,开发者可以根据业务场景需要将参数转换为各种类型。
绑定结构参数与校验
我们定义一个请求的数据结构来接收客户端提交的参数信息:
type HelloReq struct {
Name string // 名称
Age int // 年龄
}
太棒了,看起来我们既可以对参数进行注释描述,也能确定参数的类型,不再需要参数名称硬编码。
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
type HelloReq struct {
Name string // 名称
Age int // 年龄
}
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request) {
var req HelloReq
if err := r.Parse(&req); err != nil {
r.Response.Write(err.Error())
return
}
if req.Name == "" {
r.Response.Write("name should not be empty")

最低0.47元/天 解锁文章
960

被折叠的 条评论
为什么被折叠?



