go admin基础开发

一、项目配置

下载项目(当前使用主分支)

git clone https://github.com/go-admin-team/go-admin.git && cd go-admin

安装依赖(提前配置好GOPROXY)

go mod tidy

整个数据库(最简单的就是直接拉个docker跑起来),然后创个库,修改config/settings.yml 配置文件中数据库的配置:

# config/settings.yml
database:
    driver: mysql
    # 修改账号、密码、表名
    source: user:xxxxx@tcp(127.0.0.1:3306)/test_db?charset=utf8&parseTime=True&loc=Local&timeout=1000ms
  gen:
    # 代码生成读取的数据库名称
    dbname: test_db

执行migrate刷表刷数据(框架自带的一些默认数据)

go run main.go migrate

启动服务

go run main.go server

二、编写新的app

2.1.创建app

我们通常都把代码按业务上的模块进行划分,这样一个模块称为一个app,大部分都提供了CLI工具用来快速创建一个app所需的一些基础目录和代码,比如django的python manage.py createapp $appname ,go-admin也不例外,通过以下命令创建一个app

go run main.go createapp --name myfamily

执行完命令之后,会在app目录下生成myfamily目录,该目录下包含一些基础的子目录,一个router.go文件,帮我们搭建好了app的路由框架。同时生成了cmd/api/myfamily.go这个文件,将app的路由进行注册

git status                                                                                                                                     

new file:   app/myfamily/router/router.go
new file:   cmd/api/family.go

2.2.编写API

2.2.1.简单的接口

接下来先来编写一个简单的HTTP接口;

编写api:

// app/myfamily/apis/family_menu.go
package apis

import (
	"github.com/gin-gonic/gin"
	"github.com/go-admin-team/go-admin-core/sdk/api"
)

type FamilyMenu struct {
	api.Api
}

func (e FamilyMenu) GetTest(c *gin.Context) {
	e.MakeContext(c)      // 设置http上下文
	e.OK(nil, "查询成功")  // 设置返回值
}

编写路由:

// app/myfamily/router/family_menu.go
package router

import (
	"github.com/gin-gonic/gin"
	"go-admin/app/myfamily/apis"
)

func init() {
	routerNoCheckRole = append(routerNoCheckRole, registerHouseMenuRouter)
}

func registerHouseMenuRouter(v1 *gin.RouterGroup) {
	api := apis.HouseMenu{}
	r := v1.Group("/family/menu")
	{
		r.GET("", api.GetTest)
	}
}

然后重新启动服务,访问API:

# http类似curl;可通过pip3 install httpie 进行安装
http 127.0.0.1:8000/api/v1/family/menu                                                                                                      
{
    "code": 200,
    "data": null,
    "msg": "查询成功",
    "requestId": "f2d7da6b-49d1-441f-be1c-d83bf3849639"
}

一个简单的无需认证的API就编写完成了

2.2.2.为app创建数据库

基础的HTTP接口跑通之后,来为这个app把数据库的CURD给打通

使用数据库的第一步就是设计好需要用到的表,然后编写DDL并执行。

不过大部分框架都会基于ORM通过代码的方式管理数据库表的创建、修改,并且有版本的概念,比如v1版本创建了表,v2版本新增了一个字段。

  • v1、v2这些版本称为migrations(迁移版本)
  • 执行这些数据库的迁移版本操作称为migrate(迁移)。

设计好表之后,定义表的结构(需要先了解gorm)

// cmd/migrate/migration/models/family_menu.go
package models

import "go-admin/common/models"

type FamilyMenu struct {
	MenuId      int    `json:"menuId" gorm:"primaryKey;autoIncrement;type:int"` // 菜单ID
	MenuName    string `json:"MenuName" gorm:"size:255;"`               // 菜单名称
	OrderNum    int    `json:"orderNum" gorm:"size:255;type:int;"`                       // 被下单次数
	MainImg     string `json:"mainImg" gorm:"size:255;"`                        // 主图
	Description string `json:"description" gorm:"type:longtext;"`               // 描述(富文本)
	CookBook    string `json:"cookBook" gorm:"type:longtext;"`                  // 做法(富文本)

	models.ControlBy
	models.ModelTime
}

func (FamilyMenu) TableName() string {
	return "family_menu"
}

接着执行命令,此时会在 cmd/migrate/migration/version下生成一个migrate配置

go run main.go migrate -a true -g true 

修改migrate迁移文件


package version

import (
	"gorm.io/gorm"
	"runtime"

	"go-admin/cmd/migrate/migration"
	common "go-admin/common/models"
)

func init() {
	_, fileName, _, _ := runtime.Caller(0)
	migration.Migrate.SetVersion(migration.GetFilename(fileName), _1659185997198Test)
}

func _1659185997198Test(db *gorm.DB, version string) error {
	return db.Transaction(func(tx *gorm.DB) error {

		// 创建数据表
		err := tx.Debug().Migrator().AutoMigrate(
			new(models.FamilyMenu),
		)
		if err != nil {
			return err
		}


		return tx.Create(&common.Migration{
			Version: version,
		}).Error
	})
}

执行迁移

go run main.go migrate

这样自己定义的数据表就创建好了,查看sys_migration这张表,也可以看到迁移的记录

2.2.3.数据库CURD接口

这个框架的管理界面提供了自动生成一些通用代码的功能,现在先把后台管理给开起来

git clone [email protected]:go-admin-team/go-admin-ui.git  && cd go-admin-ui

# 配置好代理,方法自行搜索
yarn install && yarn run dev

后台管理默认会连接localhost的后端,直接打开 localhost:9527 就可以了。

然后将刚刚创建好的表导入到代码生成的配置项里面

go admin基础开发_第1张图片

编辑不同的接口需要哪些字段,生成信息中,配置应用名为 myfamily
go admin基础开发_第2张图片

点击预览就可以看到需要的代码了

go admin基础开发_第3张图片

点击生成代码,项目就会插入相应的代码。默认的CURD接口就实现了。

先将这些路由设置为无须JWT验证

// app/myfamily/router/family_menu.go

func registerHouseMenuRouter(v1 *gin.RouterGroup) {
	api := apis.FamilyMenu{}
	r := v1.Group("/family-menu")
	{
		r.GET("test", api.GetTest)
		r.GET("", actions.PermissionAction(), api.GetPage)
		r.GET("/:id", actions.PermissionAction(), api.Get)
		r.POST("", api.Insert)
		r.PUT("/:id", actions.PermissionAction(), api.Update)
		r.DELETE("", api.Delete)
	}
}

插入一条数据后查询:

 curl http://127.0.0.1:8000/api/v1/family-menu     
{
    "requestId": "02c1ac93-395b-47e1-87ba-cee4f6342b5b",
    "code": 200,
    "msg": "查询成功",
    "data": {
        "count": 1,
        "pageIndex": 1,
        "pageSize": 10,
        "list": [
            {
                "menuId": 1,
                "menuName": "测试",
                "orderNum": 111,
                "mainImg": "ttt",
                "description": "ttt",
                "cookBook": "ttt",
                "createBy": 0,
                "updateBy": 0,
                "createdAt": "xxx",
                "updatedAt": "xxx"
            }
        ]
    }
}

CURD接口就实现了。

你可能感兴趣的:(Go,Go,golang)