# Cadmin-server-go **Repository Path**: baiy/Cadmin-server-go ## Basic Information - **Project Name**: Cadmin-server-go - **Description**: Cadmin golang服务端 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2019-10-19 - **Last Updated**: 2021-12-29 ## Categories & Tags **Categories**: backend **Tags**: None ## README Cadmin golang 服务端 > 项目地址: [[github](https://github.com/baiy/Cadmin-server-go)] [[gitee](https://gitee.com/baiy/Cadmin-server-go)] > > 在线文档地址: ### 特点 1. 为便于给现有系统加入后台管理功能和加快新系统开发, 后台核心系统尽可能的减少依赖, 不侵入外层业务系统. 2. 对请求处理按照请求类型可自定义`请求调度类`,便于不用业务系统使用和开发. ### 安装 ``` go get -u github.com/baiy/Cadmin-server-go ``` ### 数据库 详见 [数据库结构](https://baiy.github.io/Cadmin/#/server/db) 一章 ### 使用方法 > 在代码安装和数据库导入完毕后, 接下来需要将后台系统的入口代码嵌入当前系统的合适位置, 并进行相应的配置 #### 原生 ```go package main import ( "database/sql" "fmt" "github.com/baiy/Cadmin-server-go/admin" _ "github.com/baiy/Cadmin-server-go/system" // 注册内置请求处理方法 _ "github.com/go-sql-driver/mysql" "net/http" ) var db *sql.DB // 初始化数据库 func initDb() { var err error db, err = sql.Open("mysql", "root:root@/admin_api_new?charset=utf8mb4&parseTime=True&loc=Local") if err != nil { panic(err) } } func main() { initDb() // 设置数据库操作对象 admin.SetDb(db) // [可选] 注册自定义调度器 // admin.RegisterDispatch() // [可选] 设置自定义密码生成器 // admin.RegisterPassword() // [可选] 无需校验权限的api // admin.AddNoCheckLoginRequestId() // [可选] 只需登录即可访问的api // admin.AddOnlyLoginRequestId() // [可选] 设置请求标识变量名 // admin.ActionName = "" // [可选] 设置请求token变量名 // admin.TokenName = "" // [可选] 设置请求日志记录回调函数 //admin.RegisterLogCallback() http.HandleFunc("/api/admin/", func(writer http.ResponseWriter, request *http.Request) { // 前后端分离项目一般会有跨域问题 自行处理 writer.Header().Add("Access-Control-Allow-Origin", "*") writer.Header().Add("Access-Control-Allow-Headers", "Content-Type") context := admin.NewContext(writer, request) if err := context.Output(); err != nil { fmt.Println(err) } }) _ = http.ListenAndServe("127.0.0.1:8001", nil) } ``` #### Beego ```go package main import ( "fmt" "github.com/astaxie/beego" "github.com/astaxie/beego/context" "github.com/astaxie/beego/orm" "github.com/baiy/Cadmin-server-go/admin" _ "github.com/baiy/Cadmin-server-go/system" // 注册内置请求处理方法 _ "github.com/go-sql-driver/mysql" // import your used driver ) func main() { orm.RegisterDataBase("default", "mysql", "root:root@/admin_api_new?charset=utf8mb4&parseTime=True&loc=Local", 30) db, _ := orm.GetDB("default") admin.SetDb(db) // 省略其他配置代码 查看原生示例代码 beego.Any("/api/admin/", func(ctx *context.Context) { ctx.ResponseWriter.ResponseWriter.Header().Add("Access-Control-Allow-Origin", "*") ctx.ResponseWriter.ResponseWriter.Header().Add("Access-Control-Allow-Headers", "Content-Type") c := admin.NewContext(ctx.ResponseWriter.ResponseWriter, ctx.Request) if err := c.Output(); err != nil { fmt.Println(err) } }) beego.Run("127.0.0.1:8001") } ``` #### Gorm ```go package main import ( "fmt" "github.com/baiy/Cadmin-server-go/admin" _ "github.com/baiy/Cadmin-server-go/system" // 注册内置请求处理方法 _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" "net/http" ) func main() { db, _ := gorm.Open("mysql", "root:root@/admin_api_new?charset=utf8mb4&parseTime=True&loc=Local") defer db.Close() admin.SetDb(db.DB()) // 省略其他配置代码 查看原生示例代码 http.HandleFunc("/api/admin/", func(writer http.ResponseWriter, request *http.Request) { // 前后端分离项目一般会有跨域问题 自行处理 writer.Header().Add("Access-Control-Allow-Origin", "*") writer.Header().Add("Access-Control-Allow-Headers", "Content-Type") context := admin.NewContext(writer, request) if err := context.Output(); err != nil { fmt.Println(err) } }) _ = http.ListenAndServe("127.0.0.1:8001", nil) } ``` #### Xorm ```go package main import ( "fmt" "github.com/baiy/Cadmin-server-go/admin" _ "github.com/baiy/Cadmin-server-go/system" // 注册内置请求处理方法 _ "github.com/go-sql-driver/mysql" "github.com/go-xorm/xorm" "net/http" ) func main() { engine, _ := xorm.NewEngine("mysql", "root:root@/admin_api_new?charset=utf8mb4&parseTime=True&loc=Local") admin.SetDb(engine.DB().DB) // 省略其他配置代码 查看原生示例代码 http.HandleFunc("/api/admin/", func(writer http.ResponseWriter, request *http.Request) { // 前后端分离项目一般会有跨域问题 自行处理 writer.Header().Add("Access-Control-Allow-Origin", "*") writer.Header().Add("Access-Control-Allow-Headers", "Content-Type") context := admin.NewContext(writer, request) if err := context.Output(); err != nil { fmt.Println(err) } }) _ = http.ListenAndServe("127.0.0.1:8001", nil) } ``` ### 自定义用户密码生成策略 1. 实现 `github.com/baiy/Cadmin-service-go/admin.Passwrod` 接口 2. 注册密码生成器,使用`github.com/baiy/Cadmin-service-go/admin.RegisterPassword()` 系统内置密码生成器: ### 请求调度器开发 1. 实现 `github.com/baiy/Cadmin-service-go/admin.Dispatch` 接口 2. 注册调度器,使用`github.com/baiy/Cadmin-service-go/admin.RegisterDispatch()` 内置调度器: ### 使用默认调度器开发 ```go package router import ( "github.com/baiy/Cadmin-service-go/admin" ) func init(){ admin.RegisterDefaultDispatcherHandleMethod(map[string]admin.DefaultDispatcherHandleMethod{ "request.call":func (context *admin.Context) (interface{}, error) {return nil,nil}, }) } ``` > `request.call` 对应后台请求中的类型配置值