欢迎访问宙启技术站
智能推送

如何使用go-zero开发线上项目

发布时间:2023-05-15 18:57:53

Go-Zero是一款快速、强大、可靠的Go语言开发框架,它可以帮助开发人员快速地构建基于微服务的应用程序。Go-Zero 相信“做 的 Go 微服务框架”的理念,此框架的整体设计非常人性化和面向解决实际业务问题,这样在实际开发中,不管是快速迭代开发还是上线运维,都比较直观和便捷。

下面,将详细介绍如何使用 Go-Zero 开发线上项目。

### 步骤1:安装Go-Zero

使用 Go-Zero 开发之前需要先安装相应的Go开发环境,可以去官网下载Go环境并安装。接着执行以下指令安装 Go-Zero 开发框架:

$ GO111MODULE=on GOPROXY=https://proxy.golang.org go get -u github.com/tal-tech/go-zero

执行安装后,可以查看 go-zero 命令是否正常工作:

go-zero -version

若能正常输出Go-Zero的版本信息,说明安装成功。

### 步骤2:创建go-zero项目

安装完 Go-Zero 后,可以通过 goctl 工具创建项目:

$ goctl new helloworld

该命令会在当前目录下生成 helloworld 文件夹,即整个项目的起始目录。

### 步骤3:编写api服务

接下来,我们可以使用 goctl 工具创建api服务:

$ cd helloworld
$ goctl api new greet

执行完成之后,在 helloworld 目录下会出现 greet.api、greet.go 和 greet.proto 三个文件,这就是一个完整的API。

编辑 greet.api 文件:

type Request struct {
    Name string path:"name"
    Age  int    query:"age"
}

type Response struct {
    Text string json:"text"
}

service hello {
    @handler sayHello
    get /hello/:name(.*)
        Request {
            Name string path:"name"
            Age  int    query:"age"
        }
        Response {
            Text string json:"text"
        }
}

同时,编辑 greet.go 文件,添加sayHello方法:

package handler

import (
    "context"
    "fmt"

    "github.com/tal-tech/go-zero/rest/httpx"
)

func sayHello(ctx context.Context, req *types.Request) (*types.Response, error) {
    return &types.Response{
        Text: fmt.Sprintf("Hello, %s!", req.Name),
    }, nil
}

在成功编辑 greet.api 和 greet.go 文件后,执行以下指令生成代码:

$ goctl api go -api greet.api -dir .

经过一系列操作,就能够启动API服务了:

$ go run greet.go -f etc/greet-api.yaml

### 步骤4:编写model服务

匹配dao的sql文件,生成代码

$ goctl model mysql dsn -c ~/etc/user.yaml -table users \
  -dir . -p blog -o user.sql
$ goctl model mysql ddl -c ~/etc/user.yaml -src user.sql \
  -dir . -p blog -o usermodel.go

目录下会生成usermodel.go和usermodel_test.go两个文件,其中usermodel.go中包含user表的增删改查方法,同时会关联枚举类型常量,以及以表名+cache的方式定义好相应的cache实例。

一如既往的使用dao方法:

u := &model.User{
    Username: "louyuting",
    Password: "123",
    Nickname: "loooser",
}
if err := model.NewUserModel(envs.DefaultConf).Insert(u); err != nil {
    log.Fatal(err)
}

### 步骤5:编写config、servant服务

中定义好servant的名称,Java和PHP开发人员可依据此文件定义好自己的API接口和configuration文件。

中规范定义好api和model等依赖,例如:

OrderModel:
  name: order
  driver: mysql
  dataSource: "root:123456@tcp(127.0.0.1:3306)/orderdb"
  table: product_order
  debug: false
  maxIdle: 10
  maxOpen: 100
Trace:
  # whether trace
  enable: true

服务就可以按照api和model中的定义进行顺畅调用。

到这里,我们就可以使用 Go-Zero 开发完整的线上应用程序了。通过Go-Zero,我们能够享受快速、稳定、灵活的开发流程,充分利用 Go 语言的优势,流畅、高效地进行项目开发。