- 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等都不安全