GoFrame框架学习笔记

朋友,你来晚了,不过没关系,我们的故事从现在开始,我们准备了一些使用指南,助你快速了解 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")
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值