GoFrame 安装
安装
golang版本 >= 1.20
#初始化go.mod
go mod init
# 安装gf
go get -u -v github.com/gogf/gf/v2
导入
import (
"github.com/gogf/gf/v2/frame/g"
)
快速开始
package main
import (
"fmt"
"github.com/gogf/gf/v2"
)
func main() {
fmt.Println("Hello GoFrame:", gf.VERSION)
}
运行
go run main.go
输出
Hello GoFrame: 2.9.0
获取请求参数
package main
import (
"fmt"
"github.com/gogf/gf/v2"
)
func main() {
ctx := gctx.New()
fmt.Println(ctx.Request().Get("name"))
}
请求数据结构
package main
import (
"fmt"
"github.com/gogf/gf/v2"
)
type Request struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
ctx := gctx.New()
var req Request
ctx.Request().Parse(&req)
fmt.Println(req)
}
响应数据结构
package main
import (
"fmt"
"github.com/gogf/gf/v2"
)
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
func main() {
ctx := gctx.New()
var req Request
ctx.Request().Parse(&req)
fmt.Println(req)
}
路由
package main
import (
"fmt"
"github.com/gogf/gf/v2"
)
func main() {
ctx := gctx.New()
var req Request
ctx.Request().Parse(&req)
fmt.Println(req)
}
结构化路由
package main
import (
"fmt"
"github.com/gogf/gf/v2"
)
type HelloReq struct {
g.Meta `path:"/" method:"get"`
Name string `v:"required" dc:"姓名"`
Age int `v:"required" dc:"年龄"`
}
type HelloRes struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
func Hello(ctx context.Context, req *HelloReq) (res *HelloRes, err error) {
return &HelloRes{
Code: 0,
Msg: "success",
Data: map[string]interface{}{
"name": req.Name,
"age": req.Age,
},
}, nil
}
func main() {
ctx := gctx.New()
var req HelloReq
ctx.Request().Parse(&req)
fmt.Println(req)
res, err := Hello(ctx, &req)
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
}
中间件
package main
import (
"fmt"
"github.com/gogf/gf/v2"
)
func main() {
ctx := gctx.New()
var req HelloReq
ctx.Request().Parse(&req)
fmt.Println(req)
res, err := Hello(ctx, &req)
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
}
func Middleware(ctx context.Context) (err error) {
fmt.Println("Middleware")
return nil
}
func Hello(ctx context.Context, req *HelloReq) (res *HelloRes, err error) {
return &HelloRes{
Code: 0,
Msg: "success",
Data: map[string]interface{}{
"name": req.Name,
"age": req.Age,
},
}, nil
}
func init() {
g.Server().AddMiddleware(Middleware)
g.Server().AddHandler("/hello", Hello)
}