前言
使用 chatgpt 已久,帮我大幅提升了工作效率。之前用官方web版,由于网络原因,经常问题回答到一半,没有下文了。然后自己搭建了一个基于 api key 的服务,太稳定了,真香!
今晚在想,是不是可以引导 go-zero 社区同学通过 chatgpt 来自助寻求帮助呢?于是,我就试了一下,结果。。。
很赞!
调教 chatgpt
没有使用任何复杂的 prompt,直接上。。。
我的提问:给 go 新手写个文章介绍怎么用 go-zero 编写一个简单的 web service
回答是使用的老版本的 go-zero,但内容是基本正确的,我告诉她,你 out 了,要用新版本,要用 Go 1.18,然后。。。
我的提问:给 go 新手写个文章介绍怎么用 go-zero 编写一个简单的 web service,使用go 1.18,使用go install安装goctl,而不是使用go get
以下是 chatgpt 的回答,一气呵成!
在本文中,我们将学习如何使用go-zero框架编写一个简单的web服务。我们将使用Go 1.18版本,以及github.com/zeromicro/go-zero
库和github.com/zeromicro/go-zero/tools/goctl
工具。
环境准备
首先确保你已经安装了Go 1.18。你可以通过运行以下命令来验证:
go version
接下来,安装go-zero库:
go get -u github.com/zeromicro/go-zero
然后,安装goctl工具:
go install github.com/zeromicro/go-zero/tools/goctl@latest
请确保 $GOPATH/bin
目录已经添加到您的 PATH
环境变量中。
创建项目
创建一个新的目录并进入该目录:
mkdir gozeroweb && cd gozeroweb
初始化go模块:
go mod init example.com/gozeroweb
编写API定义文件
在项目目录中,创建一个名为api.greet.api
的文件,并添加以下内容:
type GreetReq struct { Name string `path:"name"` } type GreetResp struct { Message string `json:"message"` } service greet-api { @handler GreetHandler get /greet/from/:name(GreetReq) returns (GreetResp); }
这个文件定义了一个名为greet-api的服务,它包含一个GET请求,用于处理/greet/from/:name路径,并返回一个GreetResp类型的响应。
生成代码
使用goctl工具根据API定义文件生成代码:
goctl api go -api api.greet.api -dir .
这将在当前目录下生成greet.go
和etc/greet-api.yaml
两个文件。
实现业务逻辑
修改greet.go
文件,实现GreetHandler逻辑:
package main import ( "net/http" "example.com/gozeroweb/api" "example.com/gozeroweb/internal/config" "example.com/gozeroweb/internal/svc" "github.com/zeromicro/go-zero/rest/httpx" ) func NewGreetHandler(ctx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var req api.GreetReq err := httpx.Parse(r, &req) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } message := "Hello, " + req.Name resp := api.GreetResp{Message: message} httpx.OkJson(w, resp) } } func main() { flag.Parse() var c config.Config conf.MustLoad(*configFile, &c) ctx := svc.NewServiceContext(c) server := rest.NewServer(c.RestConf) defer server.Stop() handler.RegisterHandlers(server, ctx) fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port) server.Start() }
配置并运行服务
修改etc/greet-api.yaml
以配置服务:
Name: greet-api Host: 0.0.0.0 Port: 8080
运行服务:
go run greet.go -f etc/greet-api.yaml
启动后,你可以通过访问http://localhost:8080/greet/from/YourName
来测试服务。
以上是 chatgpt 的回答,你满意嘛?
我也尝试了 google 的 bard,google 这方面确实落后了点。。。
然后呢?!
欢迎加入 go-zero 社区群,在群里跟大家分享 chatgpt & go-zero 让你惊讶的故事!
后续我们也会整理关于 go-zero 的实用 prompt 列表给大家,敬请期待。
项目地址
go-zero 微服务框架:https://github.com/zeromicro/go-zero