goZero入门使用及注意事项

GoZero入门使用及注意事项

1. 环境准备

1.1 Go语言安装

Windows安装(Go for Windows)[https://golang.org/dl/go1.15.8.windows-amd64.msi]

# 验证Go版本
go version

1.2 Go MODULE 配置

go env -w GO111MODULE="on"

开启Go MODULE之后就不需要配置GO PATH,代码在任何地方都可以运行

设置GOPROXY代理

go env -w GOPROXY=https://goproxy.cn

设置Go代理是因为我们要引用的大部分包都在国外,使用代理之后可以不翻墙就快速下载。

1.3 Goctl 安装

终端输入以下指令就可以

go install github.com/zeromicro/go-zero/tools/goctl@latest

Goctl 是gozero的核心之一,在使用时要通过goctl来进行框架代码的生成。要能够熟练使用。

2. API 配置

api配置控制着api服务中的各种功能,包含但不限于服务监听地址,端口,环境配置,日志配置等

这里配置可以先不管,一开始的配置够我们用。

3. 服务搭建

3.1 框架生成

首先新建一个文件夹,命名为项目名称,在文件夹中创建一个子文件夹,命名为api,在api文件夹中创建一个api文件,这里用zhibo.api示范

3.1.1 api文件

这里先定义一个getuserinfo 接口,首先在type中定义一个GetUserInfo接口,实现获取用户的信息功能。具体定义方法如下:

//api 语法版本
syntax = "v1"

//介绍
info(
	author:"dsy"
	date:   "2023.03.20"
	desc:   "直播录制"
)

// 在type中定义GetUserInfo发送的Req 服务端返回的Reply格式,
//我这里请求使用的是form表单,具体字段是UserId ,
//返回的是用户的roomId 和WebId 后边的`json:""`表示这个字段在前端返回中的格式。
type (
	GetUserInfoReq {
		UserId string `form:"userid"`
	}

	GetUserInfoReply {
		RoomData string `json:"room_id"`
		WebId    string `json:"web_id"`
	}
)
3.1.2 生成代码框架

编写完api文件后,在终端中使用如下命令,生成代码框架

# 对命令中的三个参数进行一个简单说明
goctl api go -api zhibo.api -dir ../ -style goZero
# -api 是指定你要使用的api文件
# -dir 指定要生成的目录,我这里是指定在项目的根目录下,就是api文件的上一个文件夹目录下,所以使用 ../
# -style 指定生成的代码格式, 在Go语言中,使用最多的格式就是驼峰式,我这里指定的也是驼峰式

在api文件夹中执行上述指令,就会生成代码框架,其代码结构如下,注释是一些功能解释。

$ tree zhibo
zhibo
├── api												# 自己定义的api文件夹,里边放的是api文件,用来对接口进行定义。
│   └── zhibo.api
├── etc												
│   └── zhibo-api.yaml								# 自动生成的,写一些配置文件
├── zhibo.go										# 启动函数接口
└── internal
    ├── config
    │   └── config.go								# 这个文件用来加载配置文件
    ├── handler
    │   ├── zhibohandler.go							# 自己生成的handler
    │   └── routes.go
    ├── logic
    │   └── zhibologic.go							# 业务逻辑实现文件
    ├── svc
    │   └── servicecontext.go						# 定义一些上下文
    └── types
        └── types.go								# 这里存放的是在api定义接口时定义的一些结构,可以在业务逻辑中直接使用

这里我们只需要关心logic目录,可以在zhibologic.go中开始写我们的接口。

3.1.3 业务逻辑实现

上边的框架生成的部分不需要我们关心,只需要在定义的方法那里写业务逻辑。

package logic

import (
	"context"

	"zhibo/internal/svc"
	"zhibo/internal/types"

	"github.com/zeromicro/go-zero/core/logx"
)

type InsertAccountLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewInsertAccountLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InsertAccountLogic {
	return &InsertAccountLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}



func (l *GetUserInfoLogic) GetUserInfo(req *types.InsertAccountReq) (resp *types.InsertAccountReply, err error) {
	//在这里写业务逻辑

	return
}

🔥编写完业务逻辑后可以试着运行,下边是运行的步骤:

# 在运行时先进入入口函数所在的文件夹,这里就是项目的文件夹
# 先生成go mod,执行如下命令
go mod init 项目名(zhibo)

# 生成go mod 后进行包的同步,执行如下命令
go mod tidy

# 执行完上述命令就可以进行
go run zhibo.go

启动之后一个简单的接口就实现了,可以通过接口调试工具进行调试。

Starting server at 0.0.0.0:8888...

$ curl -i -X GET http://localhost:8888/from/you

4. 数据库配置

4.1 数据库连接

我使用的是官方提供的第二种model生成方式,先在mysql中建立数据表,然后使用goctl工具连接

  • 创建数据库并建好数据表
  • 新建一个model文件夹并进入
  • 执行如下指令
# 这句指令中-url 用来指定数据库的连接地址
# -table 指定连接哪张表
# -c 是指使用带缓存的模式
# -dir 是指定文件生成的目录 . 是指当前目录
goctl model mysql datasource -url="$datasource" -table="user" -c -dir . 
  • 命令执行完后可以查看文件夹中的文件
$tree
.
├── user.sql
├── usermodel.go
├── usermodel_gen.go
└── vars.go		

至此,数据库连接完成,接下来需要进行数据库的配置。

4.2 数据库配置

在数据库连接完成后要进行数据库的配置,主要是定义一些上下文,以便能够在业务逻辑中直接使用数据库。

4.2.1 config文件
package config

import "github.com/zeromicro/go-zero/rest"

type Config struct {
	rest.RestConf
    //加入DB 
	DB struct {
		DataSource string
	}
}
4.2.2 etc/zhibo.yaml 文件
# 添加这两行,指定数据库连接的地址
DB:
  DataSource: root:password@tcp(localhost:3306)/live_recording
4.2.3 svc/servicecontext.go 文件
package svc

import (
	"zhibo/internal/config"
	"zhibo/model"

	"github.com/zeromicro/go-zero/core/stores/sqlx"
)

type ServiceContext struct {
	Config config.Config
    //这行是我新添加的一张表,
	UserModel model.LiveRecordingVideoModel

}


//配置数据库时,需要在这里添加 model
func NewServiceContext(c config.Config) *ServiceContext {
	return &ServiceContext{
		Config: c,
        //同时这里也要新添加配置
		UserModel: model.NewLiveRecordingVideoModel(sqlx.NewMysql(c.DB.DataSource)),
		
	}
}

当上述配置都完成后,就可以在logic文件中,对数据表进行增删改查。下面是一个数据查询的逻辑。

package logic

import (
	"context"
	"errors"

	"zhibo/internal/svc"
	"zhibo/internal/types"
	"zhibo/model"

	"github.com/zeromicro/go-zero/core/logx"
)

type FineVideoLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewFineVideoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *FineVideoLogic {
	return &FineVideoLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

	//根据Id查询视频,如果存在则返回视频相关内容。
func (l *FindVideoLogic) FindVideo(req *types.FindVideoReq) (resp *types.FindVideoReply, err error) {
	//这个FindVideo是一个方法,同时FindVideoLogic结构体关联了和数据库,只需要通过l调用gozero的封装,就可以实现查询。
	VideoName,err :=  l.svcCtx.UserModel.FindOne(l.ctx,int64(req.Id))
	if err != nil && err != model.ErrNotFound {
		return nil,errors.New("数据查询失败")
	}

	if VideoName == nil {
		return nil,errors.New("视频不存在")
	}
	return &types.FindVideoReply{
		Path: VideoName.Path,
	},err
}

到这里数据库的相关连接配置也就完成,可以关注业务逻辑的编写。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值