go-zero实战
https://github.com/zeromicro/go-zero
安装goctl
$ GO111MODULE=on go install github.com/zeromicro/go-zero/tools/goctl@latest
新建项目
$ mkdir smartscan && cd smartscan
$ go mod init smartscan
$ go get -u github.com/zeromicro/go-zero@latest
代码快速生成
goctl api new api
logic添加逻辑代码
resp = new(types.Response)
resp.Message = req.Name
初始化项目依赖
cd api
go mod tidy
go run api.go
访问http://127.0.0.1:8888/from/me,成功返回证明环境没问题
集成gorm支持数据库操作
新建models/user_basic.go
package models
import "gorm.io/gorm"
type UserBasic struct {
gorm.Model
Identity string `gorm:"column:identity;type:varchar(255);" json:"identity"`
Name string `gorm:"column:name;type:varchar(50);" json:"name"`
Password string `gorm:"column:password;type:varchar(50);" json:"password"`
}
func (table UserBasic) TableName() string {
return "user_basic"
}
新建全局配置
common/init_gorm/enter.go
package init_gorm
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"smartscan/models"
)
func InitGorm(MysqlDataSource string) *gorm.DB {
db, err := gorm.Open(mysql.Open(MysqlDataSource), &gorm.Config{})
if err != nil {
panic("数据库连接失败,error=" + err.Error())
} else {
fmt.Println("数据库连接成功")
}
err = db.AutoMigrate(&models.UserBasic{})
if err != nil {
panic("AutoMigrate失败,error=" + err.Error())
}
return db
}
api/user.api
type LoginRequest {
Username string `json:"usernme"`
Password string `json:"password"`
}
@server (
prefix: /api/users
)
service users{
@handler login
post /login (LoginRequest) returns (string )
}
生成api文件
goctl api go -api user.api -dir .
编辑smartscan/api/internal/config/config.go
package config
import "github.com/zeromicro/go-zero/rest"
type Config struct {
rest.RestConf
Mysql struct{
DataSource string
}
}
编辑smartscan/api/etc/users.yaml
Name: users
Host: 0.0.0.0
Port: 8888
Mysql:
DataSource: root:root@tcp(127.0.0.1:3306)/zero_db?charset=utf8mb4&parseTime=True&loc=Local
编辑user_gorm/api/internal/svc/servicecontext.go
package svc
import (
"gorm.io/gorm"
"zero_study/common/init_gorm"
"zero_study/user_gorm/api/internal/config"
)
type ServiceContext struct {
Config config.Config
DB *gorm.DB
}
func NewServiceContext(c config.Config) *ServiceContext {
return &ServiceContext{
Config: c,
DB: init_gorm.InitGorm(c.Mysql.DataSource),
}
}
编辑逻辑代码 user_gorm/api/internal/logic/loginlogic.go
func (l *LoginLogic) Login(req *types.LoginRequest) (resp string, err error) {
var user models.UserBasic
err = l.svcCtx.DB.Take(&user, "username = ? and password = ?", req.Username, req.Password).Error
if err != nil {
return "", errors.New("登陆失败")
}
return user.Name, nil
}
运行后自动生成数据库
License:
杭州小单纯