Demo
开发流程
0. gf init myapp
1. 配置 hack/config.yaml
# GoFrame CLI tool configuration.
gfcli:
  gen:
    dao:
      - link: "pgsql:postgres:postgres@tcp(localhost:5432)/test"
        tables: "user"
        descriptionTag: true
        noModelComment: true
    pbentity:
      - link: "pgsql:postgres:postgres@tcp(localhost:5432)/test"
        tables: "user"
2. 配置 manifest/config/config.yaml
# GRPC Server.
grpc:
  address: "127.0.0.1:8000"
  name: "test"
  logPath: ""
  logStdout: true
  errorStack: true
  errorLogEnabled: true
  errorLogPattern: "error-{Ymd}.log"
  accessLogEnabled: true
  accessLogPattern: "access-{Ymd}.log"
# Global logging.
logger:
  level: "all"
  stdout: true
# Database.
database:
  logger:
    level: "all"
    stdout: true
  default:
    link: "pgsql:postgres:postgres@tcp(localhost:5432)/test"
    debug: true
3. 生成 manifest/protobuf/pbentity/user.proto
gf gen pbentity
如果你的项目在 $GOPATH/src 下,执行 gf gen pb,跳过第 4-6 步
4. 生成 api/pbentity/user.pb.go
由于我的项目不在 $GOPATH/src 下,执行 gf gen pb 会报错找不到 google/protobuf/timestamp.proto,所以手动生成 pbentity
protoc -I $GOPATH/src --proto_path=/your-source-folder --go_out=paths=source_relative:/your-source-folder --go-grpc_out=paths=source_relative:/your-source-folder /your-source-folder/manifest/protobuf/pbentity/user.proto
5. 编写 manifest/protobuf/user/v1/user.proto
这个 proto 就是最终提供给调用方的接口
syntax = "proto3";
package user;
option go_package = "github.com/gogf/gf-demo-grpc/api/user/v1";
import "pbentity/user.proto";
service User{
    rpc Create(CreateReq) returns (CreateRes) {}
    rpc GetOne(GetOneReq) returns (GetOneRes) {}
    rpc GetList(GetListReq) returns (GetListRes) {}
    rpc Delete(DeleteReq) returns (DeleteRes) {}
}
message CreateReq {
    string Passport = 1; // v: required
    string Password = 2; // v: required
    string Nickname = 3; // v: required
}
message CreateRes {}
message GetOneReq {
    uint64 Id = 1; // v: required
}
message GetOneRes {
    pbentity.User User = 1;
}
message GetListReq {
    int32 Page = 1;
    int32 Size = 2;
}
message GetListRes {
    repeated pbentity.User Users = 1;
}
message DeleteReq {
    // v: min:1#
    // v: Please select the user to be deleted.    uint64 Id = 1;
}
message DeleteRes {}
6. 生成 pb 文件
由于我的项目不在 $GOPATH/src 下,执行 gf gen pb 会在第 4 步报错,所以手动生成 pb
protoc -I $GOPATH/src -I /your-source-folder/manifest/protobuf --proto_path=/your-source-folder --go_out=paths=source_relative:/your-source-folder/api --go-grpc_out=paths=source_relative:/your-source-folder/api /your-source-folder/manifest/protobuf/user/v1/user.proto
7. 生成 model 文件
do 用来操作数据库,entity 用来从数据库取值
gf gen dao
8. 编写 logic
9. 生成 service
gf gen service
10. 编写 controller
注意事项
要在 $GOPATH/src 目录下提前准备好依赖的 proto,或者放在 proto 同一目录下
遇到的问题
ORM 直接 Scan 到 pbentity 中时间一直为 0,可以先 Scan 到 Enity,然后再处理,demo 中有演示代码。