GoAdmin 是一个基于 golang 面向生产的数据可视化管理平台搭建框架,可以让你使用简短的代码在极短时间内搭建起一个管理后台。
直接点先看看示例:
使用模块go module加载依赖
-
GOPROXY=https://goproxy.cn GO111MODULE=on go run .
-
访问: http://localhost:9033/admin
很快的就搭起来了,样子也还不错。
部份文件或目录:
adm_config.ini adm配置文件(adm工具配置文件)
admin.db 示例中使用简单的sqlite3数据库
config.json 配置文件
目录html 前端html文件
目录models ORM模型文件
目录pages 页面控制器
目录tables 数据模型表格文件
make build编译出的二进制文件,复制admin.db和config.json文件,系统就独立运行起来。对其upx压缩后运行也很正常。
关于sqlite3的编译,需要修改Makefile中CGO_ENABLED=1,否则出现以下错误:
panic: Binary was compiled with ‘CGO_ENABLED=0’, go-sqlite3 requires cgo to work. This is a stub
准备
GoAdmin目前内置支持主流SQL数据库(mysql/postgresql/sqlite/mssql)
下载它的工具: http://doc.go-admin.cn/zh/install/,但我 go install github.com/GoAdminGroup/go-admin/adm 没成功。
正确方法如下:
-
新建目录,然后初始化 go mod init adm
-
go get github.com/GoAdminGroup/go-admin/adm
-
go install github.com/GoAdminGroup/go-admin/adm
-
在gopath中可以找到编译好的adm。当前版本1.2.22
看起来它基本支持常见的框架: gin beego fasthttp buffalo echo gorilla/mux iris chi gf
开始
通过工具新建工程 adm init -l cn
它是命令行方式的一步步提问,easy。 它更是人性的加入了web设置:adm init web -l cn
我选择了sqlite3方便使用,下载基本的数据库:https://gitee.com/go-admin/go-admin/raw/master/data/admin.db
go mod init goAdmin 初始化模块
go mod tidy 添加相关模块
go run main.go
运行起来了,文件没几个,分别看看。
package main
import (
"io/ioutil"
"log"
"os"
"os/signal"
_ "github.com/GoAdminGroup/go-admin/adapter/gin" // 框架适配器,我选择了gin
_ "github.com/GoAdminGroup/go-admin/modules/db/drivers/sqlite" // sqlite3驱动
_ "github.com/GoAdminGroup/themes/sword" // 样式主题
"github.com/GoAdminGroup/go-admin/engine"
"github.com/GoAdminGroup/go-admin/template"
"github.com/GoAdminGroup/go-admin/template/chartjs"
"github.com/gin-gonic/gin"
"goAdmin/models" //goAdmin是我的项目名称
"goAdmin/pages"
"goAdmin/tables"
)
func main() {
startServer()
}
func startServer() {
gin.SetMode(gin.ReleaseMode)
gin.DefaultWriter = ioutil.Discard
r := gin.Default()
template.AddComp(chartjs.NewChart())
eng := engine.Default() // 实例化一个GoAdmin引擎对象
// 增加配置与插件,使用Use方法挂载到Web框架中
// 这里引入你需要管理的业务表配置
if err := eng.AddConfigFromJSON("./config.json").
AddGenerators(tables.Generators).
Use(r); err != nil {
panic(err)
}
r.Static("/uploads", "./uploads")
eng.HTML("GET", "/admin", pages.GetDashBoard)
// 后台的一个测试页面。模板hello.tmpl只需要放右方内容就可了。它会自动放在框架页面中。
eng.HTMLFile("GET", "/admin/hello", "./html/hello.tmpl", map[string]interface{}{
"msg": "Hello world",
})
models.Init(eng.SqliteConnection())
_ = r.Run(":8080")
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt)
<-quit
log.Print("closing database connection")
eng.SqliteConnection().Close()
}
hello.html
<div class="hello">
<h1>{{index . "msg"}}</h1>
</div>
<style>
.hello {
padding: 50px;
width: 100%;
text-align: center;
}
</style>
试图修改一下模板 (看方法)
下载模板文件到public解压,在config.json配置文件中命名模板,增加配置项asset_root_path,指向指public目录。
重启服务,在页面后台修改为刚命名的模板。
注意在main.go中添加引用 _ “github.com/GoAdminGroup/themes/adminlte/separation”
然后…
然后,看官方文章就有点跟不上节奏了,不知所云。也不知道是不是开发团队太高端了,看得不明不白。
虽然也可以通过示例来分析学习,不过看不懂官方文档,必然事倍功半。
然后,就没有然后了。