- Published on
goframe的使用
- Authors
- Name
- JiGu
- @crypto20x
环境要求
- go 语言环境
- git版本管理
新建项目
1. 安装gf cli工具
git clone https://github.com/gogf/gf && cd gf/cmd/gf && go install
执行gf -v
有下列打印信息,表示安装成功。
v2.6.1
Welcome to GoFrame!
Env Detail:
Go Version: go1.21.5 windows/amd64
GF Version(go.mod):
github.com/gogf/gf/contrib/drivers/mysql/v2@v2.6.1
github.com/gogf/gf/v2@v2.6.1
CLI Detail:
Installed At: C:\Users\tianjiang\go\bin\gf.exe
Built Go Version: go1.21.5
Built GF Version: v2.6.1
Others Detail:
Docs: https://goframe.org
Now : 2023-12-29T10:26:34+08:00
2. 创建项目
创建一个名为 demo
的项目
gf init demo -u
启动项目
gf run main.go
接入数据库
在 manifest/config/config.yaml
写入数据库配置
database:
logger:
level: "all"
stdout: true
default:
link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
debug: true
在 main.go 导入mysql驱动
import _ "github.com/gogf/gf/contrib/drivers/mysql/v2"
在hack/config.yaml
下加入如下配置:
gfcli:
gen:
dao:
- link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test
运行 gf gen dao
,生成 entity dao do
文件
编写API
例如写一个 user
的api:
在 api\user\v1
下 新建user.go
package v1
import (
"github.com/gogf/gf/v2/frame/g"
)
type HelloReq struct {
g.Meta `path:"/hello" tags:"Hello" method:"get" summary:"You first hello api"`
}
type HelloRes struct {
g.Meta `mime:"text/html" example:"string"`
}
运行 gf gen ctrl
, 在目录 api\user\user.go
会生成api
的接口代码,在 internal\controller\user\user_new.go
被包装成函数,并在 internal\cmd\cmd.go
中被注册到路由。
例子:
func (c *ControllerV1) Hello(ctx context.Context, req *v1.HelloReq) (res *v1.HelloRes, err error) { g.RequestFromCtx(ctx).Response.WriteStatus(400) // 写入http status g.RequestFromCtx(ctx).Response.WriteJson(g.Array{ // 写入返回结果 1, 23, 4, 5, }) return }
如果不用
res *v1.HelloRes
这个返回值,那么需要用g.RequestFromCtx(ctx).Response.Write()
显性的写返回值,返回结构也是自定义的。如果使用填充res返回结构,则会被默认中间件接管,返回统一的结构。
{ "message": xxx "code": xxx "data": xxx }
业务编写
按文档的设计,需要将逻辑写到 internal\logic
里,实现 internal\service
里的接口, 我的业务简单,就将所有业务直接写到service包里。
internal\model
在这个包里创建
user.go
提供controller
与service
交互的数据结构package model type UserInfoOutput struct { Nickname string // ... another more.. } type UserSignInInput struct { Passport string Password string }
用户密码加密
使用 "golang.org/x/crypto/bcrypt"
保障密码的安全性,md5,sha1,sha256等都不安全