项目、API 的创建非模板填写,会调用 go mod tidy
等命令,将出现按需拉取 github 代码的情况,耗时视网络环境而定。
我本地有缓存的情况下(之前新建过),新建项目大约 20s
我本地有缓存的情况下(之前新建过),新建 API 大约 5s
新建项目
最简单的模式:
$ fresh-go new helloworld # helloworld 为项目名称
带上 remote 和 owner 创建项目
$ fresh-go new helloworld --remote=github.com --owner=SmallTianTian
你可以通过开启帮助,来查看新建项目支持哪些可选项。
$ fresh-go new --help
这里有个简单的全家福介绍:
$ fresh-go new hello \ # 项目名称
--debug \ # 打开 debug 开关,查看工具运行日志
--grpc=false \ # 关闭 gRPC 服务,默认是开启,将导致 proxy 服务一同关闭
--log=logrus \ # 使用 logrus 作为日志框架,默认是 zap。目前有 logrus 和 zap 可选
--remote=github.com \ # remote 为 github.com。将体现在 go.mod 的 module 中,例如本项目 module 为 github.com/SmallTianTian/fresh-go,remote 就是 github.com
--owner=SmallTianTian \ # owner 为 SmallTianTian,一般为用户名或者组织名。将体现在 go.mod 的 module 中,例如本项目 module 为 github.com/SmallTianTian/fresh-go,owner 就是 SmallTianTian
-p=/root/workspace/go \ # 项目创建路径,依托 go.mod,我们可以将项目创建在任何地方
--proxy=false \ # 关闭 gRPC proxy,默认是开启,gRPC 服务的关闭也会导致 proxy 服务关闭。
--vendor # 开启 vendor 目录,默认不开启。
关于 remote 和 owner 可能有点儿绕,官方也没有这样的规定,这是参考 git 路径的来的,module 由如下结构构成。remote 和 owner 为可选项,但 owner 出现时必须有 remote。
<remote>/<owner>/<project>
运行 demo
新建完项目后,你可以通过如下两种命令中的一个来运行项目:
$ make run # 推荐做法,但需要本地有 make 及 golang-ci 插件
# 上下两条命令选一条执行即可
$ go run cmd/server/main.go cmd/server/wire_gen.go # 仅使用 go 命令
你将看到程序将日志打印在终端,如果没有去掉 gRPC 及 proxy 服务,你可以看到它们监听 gRPC(:50051) 和 proxy(:8089) 端口,你可以使用如下命令来查看程序响应:
$ curl 'http://localhost:8089/say/bob'
# 下面为响应示例
{"message":"Hello bob~"}
新建 API
当需要加入新的服务时,你可以通过本工具来快速创建模板。
使用如下命令:
稍等片刻,你将能看到项目中
api
目录中多出了 user 文件夹,里面有 user 相关的 proto 文件,proto 编译后的代码。
在 internal/ui/grpc
中看到名为 user_v1.go
的对应 service 实现。
对应的 service 实现已经被注册进系统启动中。
proto 已经包含默认的 create
、 delete
、 update
、 get
、 list
方法,你需要在 proto 中补齐相关请求及响应的字段,并在实现中完善代码即可。
此时,你可以像运行 demo 一样运行项目,新的 api 也将可以被访问。
$ curl -v 'http://localhost:8089/v1/user/1'
# 下面为新建 API,但没有实现的响应
{"Code":1,"Message":"NOT SUPPORT.","Action":"","Reason":"","Details":[],"CauseError":""}