快速开始
GoAdmin通过各种适配器使得你在各个web框架中使用都十分的方便。目前支持的web框架有:
您可以选择拿手的或者业务项目正在用的框架开始,如果上述没有你喜欢的框架,欢迎给我们提issue
下面演示一下怎么快速搭建和启动项目。

初始化

首先新建一个项目文件夹,然后进入文件夹中使用最新版命令行工具 adm 执行:
1
$ adm init -l cn
Copied!
或者使用以下命令,可以打开一个web界面安装:
1
$ adm init web -l cn
Copied!
初始化完成后,在你的项目文件夹下会生成整个项目的骨架。其中有一个main.go文件,内容如下:
1
package main
2
3
import (
4
"io/ioutil"
5
"log"
6
"os"
7
"os/signal"
8
9
_ "github.com/GoAdminGroup/go-admin/adapter/gin" // 引入适配器,必须引入,如若不引入,则需要自己定义
10
_ "github.com/GoAdminGroup/themes/adminlte" // 引入主题,必须引入,不然报错
11
_ "github.com/GoAdminGroup/go-admin/modules/db/drivers/mysql" // 引入对应数据库引擎
12
13
"github.com/GoAdminGroup/go-admin/engine"
14
"github.com/GoAdminGroup/go-admin/template"
15
"github.com/GoAdminGroup/go-admin/template/chartjs"
16
"github.com/gin-gonic/gin"
17
18
"xxx/pages"
19
"xxx/tables"
20
)
21
22
func main() {
23
startServer()
24
}
25
26
func startServer() {
27
gin.SetMode(gin.ReleaseMode)
28
gin.DefaultWriter = ioutil.Discard
29
30
r := gin.Default()
31
32
template.AddComp(chartjs.NewChart())
33
34
// 实例化一个GoAdmin引擎对象
35
eng := engine.Default()
36
37
// 增加配置与插件,使用Use方法挂载到Web框架中
38
if err := eng.AddConfigFromJSON("./config.json").
39
// 这里引入你需要管理的业务表配置
40
// 后面会介绍如何使用命令行根据你自己的业务表生成Generators
41
AddGenerators(tables.Generators).
42
Use(r); err != nil {
43
panic(err)
44
}
45
46
r.Static("/uploads", "./uploads")
47
48
eng.HTML("GET", "/admin", pages.GetDashBoard)
49
eng.HTMLFile("GET", "/admin/hello", "./html/hello.tmpl", map[string]interface{}{
50
"msg": "Hello world",
51
})
52
53
_ = r.Run(":9033")
54
55
quit := make(chan os.Signal)
56
signal.Notify(quit, os.Interrupt)
57
<-quit
58
log.Print("closing database connection")
59
eng.MysqlConnection().Close()
60
}
Copied!
留意以上代码与注释,对应的步骤都加上了注释,十分好理解:
    匿名引入适配器主题数据库驱动(必须)
    载入设置好的全局配置项:eng.AddConfig
    挂载到Web框架中:eng.Use
接着根据提示依次执行: (以下为mac/linux用户执行命令,windows用户需根据提示执行)
1
$ make init module=xxx
2
$ GORPOXY=https://goproxy.io make install
3
$ make serve
Copied!
运行代码,访问:http://localhost:9033/admin/login 默认登录账号:admin 默认登录密码:admin
注意:golang版本高于1.11强烈建议开启GO111MODULE=on,如果运行下载依赖有问题,这里提供了依赖包下载:

添加业务表管理

详见:

前端模板文件分离

如果对前端功能需要较多自定义,可使用模板文件分离的形式。
假设已经使用adm init初始化一个模板后,那么需要进行以下几步更改:
    修改main.go文件,修改导入主题包为分离主题包
    下载模板文件夹public到本地
    修改config.json文件:
      改动主题 theme 配置项:adminlte 改为 adminlte_sep,sword 改为 sword_sep
      增加 asset_root_path 配置项,为模板文件夹(public)的地址,建议用绝对路径,末尾需要带上斜杆
    重新启动,并在网站右上角进去设置页更改主题
这时修改一下模板文件夹下文件public/pages/header.tmpl试试吧!
main.go
1
package main
2
3
import (
4
...
5
6
_ "github.com/GoAdminGroup/themes/adminlte/separation"
7
8
...
9
)
10
11
func main() {
12
startServer()
13
}
14
15
func startServer() {
16
...
17
}
Copied!
config.json
1
{
2
...
3
"theme": "sword_sep",
4
...
5
"asset_root_path": "./public/"
6
}
Copied!

全局配置项说明

注意:配置一旦初始化生成后,后续修改请在网站右上角中进入配置中心修改! 注意:配置一旦初始化生成后,后续修改请在网站右上角中进入配置中心修改! 注意:配置一旦初始化生成后,后续修改请在网站右上角中进入配置中心修改!
1
package config
2
3
import (
4
"html/template"
5
)
6
7
type Database struct {
8
Host string // 地址
9
Port string // 端口
10
User string // 用户名
11
Pwd string // 密码
12
Name string // 数据库名
13
MaxIdleCon int // 最大闲置连接数
14
MaxOpenCon int // 最大打开连接数
15
Driver string // 驱动名
16
File string // 文件名
17
DSN string // DSN语句:如果设置了DSN语句,则优先使用DSN进行连接
18
Params map[string]string // DSN的额外参数
19
}
20
21
// 数据库配置
22
// 为一个map,其中key为数据库连接的名字,value为对应的数据配置
23
// 注意:key为default的数据库是默认数据库,也是框架所用的数据库,而你可以
24
// 配置多个数据库,提供给你的业务表使用,实现对不同数据库的管理。
25
type DatabaseList map[string]Database
26
27
// 存储目录:存储头像等上传文件
28
type Store struct {
29
Path string // 存储路径
30
Prefix string // url访问前缀
31
}
32
33
type Config struct {
34
// 数据库配置
35
Databases DatabaseList `json:"database"`
36
37
// 登录域名
38
Domain string `json:"domain"`
39
40
// 网站语言
41
Language string `json:"language"`
42
43
// 全局的管理前缀
44
UrlPrefix string `json:"prefix"`
45
46
// 主题名
47
Theme string `json:"theme"`
48
49
// 上传文件存储的位置
50
Store Store `json:"store"`
51
52
// 网站的标题
53
Title string `json:"title"`
54
55
// 侧边栏上的Logo
56
Logo template.HTML `json:"logo"`
57
58
// 侧边栏上的Logo缩小版
59
MiniLogo template.HTML `json:"mini_logo"`
60
61
// 登录后跳转的路由
62
IndexUrl string `json:"index"`
63
64
// 自定义登录路由地址
65
LoginUrl string `json:"login_url",yaml:"login_url",ini:"login_url"`
66
67
// 是否开始debug模式
68
Debug bool `json:"debug"`
69
70
// Info日志路径
71
InfoLogPath string `json:"info_log"`
72
73
// Error log日志路径
74
ErrorLogPath string `json:"error_log"`
75
76
// Access log日志路径
77
AccessLogPath string `json:"access_log"`
78
79
// 是否开始数据库Sql操作日志
80
SqlLog bool `json:"sql_log"`
81
82
// 是否关闭access日志
83
AccessLogOff bool `json:"access_log_off"`
84
// 是否关闭info日志
85
InfoLogOff bool `json:"info_log_off"`
86
// 是否关闭error日志
87
ErrorLogOff bool `json:"error_log_off"`
88
89
// 日志配置
90
Logger Logger `json:"logger",yaml:"logger",ini:"logger"`
91
92
// 网站颜色主题
93
ColorScheme string `json:"color_scheme"`
94
95
// Session的有效时间,单位为秒
96
SessionLifeTime int `json:"session_life_time"`
97
98
// Cdn链接,为全局js/css配置cdn链接
99
AssetUrl string `json:"asset_url"`
100
101
// 文件上传引擎
102
FileUploadEngine FileUploadEngine `json:"file_upload_engine"`
103
104
// 自定义头部js/css
105
CustomHeadHtml template.HTML `json:"custom_head_html"`
106
107
// 自定义尾部js/css
108
CustomFootHtml template.HTML `json:"custom_foot_html"`
109
110
// 登录页面标题
111
LoginTitle string `json:"login_title"`
112
113
// 登录页面logo
114
LoginLogo template.HTML `json:"login_logo"`
115
116
// 自定义认证用户的数据表
117
AuthUserTable string `json:"auth_user_table",yaml:"auth_user_table",ini:"auth_user_table"`
118
119
// 额外
120
Extra ExtraInfo `json:"extra",yaml:"extra",ini:"extra"`
121
122
// 页面动画
123
Animation PageAnimation `json:"animation",yaml:"animation",ini:"animation"`
124
125
// 是否不限制不同IP登录,默认限制
126
NoLimitLoginIP bool `json:"no_limit_login_ip",yaml:"no_limit_login_ip",ini:"no_limit_login_ip"`
127
128
// 网站开关
129
SiteOff bool `json:"site_off",yaml:"site_off",ini:"site_off"`
130
131
// 是否隐藏配置中心入口,默认显示
132
HideConfigCenterEntrance bool `json:"hide_config_center_entrance",yaml:"hide_config_center_entrance",ini:"hide_config_center_entrance"`
133
134
// 是否隐藏应用信息入口,默认显示
135
HideAppInfoEntrance bool `json:"hide_app_info_entrance",yaml:"hide_app_info_entrance",ini:"hide_app_info_entrance"`
136
137
// 隐藏模块列表入口,默认显示
138
HidePluginEntrance bool `json:"hide_plugin_entrance,omitempty" yaml:"hide_plugin_entrance,omitempty" ini:"hide_plugin_entrance,omitempty"`
139
140
// 自定义404页面
141
Custom404HTML template.HTML `json:"custom_404_html,omitempty",yaml:"custom_404_html",ini:"custom_404_html"`
142
143
// 自定义403页面
144
Custom403HTML template.HTML `json:"custom_403_html,omitempty",yaml:"custom_403_html",ini:"custom_403_html"`
145
146
// 自定义500页面
147
Custom500HTML template.HTML `json:"custom_500_html,omitempty",yaml:"custom_500_html",ini:"custom_500_html"`
148
149
// 配置更新处理函数
150
UpdateProcessFn UpdateConfigProcessFn `json:"-",yaml:"-",ini:"-"`
151
152
// 是否开放admin的json apis,默认关闭
153
OpenAdminApi bool `json:"open_admin_api",yaml:"open_admin_api",ini:"open_admin_api"`
154
155
// 隐藏访客用户设置菜单
156
HideVisitorUserCenterEntrance bool `json:"hide_visitor_user_center_entrance",yaml:"hide_visitor_user_center_entrance",ini:"hide_visitor_user_center_entrance"`
157
158
// 需要排除的主题模块
159
ExcludeThemeComponents []string `json:"exclude_theme_components,omitempty" yaml:"exclude_theme_components,omitempty" ini:"exclude_theme_components,omitempty"`
160
161
// 引导文件路径
162
BootstrapFilePath string `json:"bootstrap_file_path,omitempty" yaml:"bootstrap_file_path,omitempty" ini:"bootstrap_file_path,omitempty"`
163
164
// go mod文件路径
165
GoModFilePath string `json:"go_mod_file_path,omitempty" yaml:"go_mod_file_path,omitempty" ini:"go_mod_file_path,omitempty"`
166
}
Copied!
日志设置:
1
type Logger struct {
2
// 编码设置
3
Encoder EncoderCfg `json:"encoder",yaml:"encoder",ini:"encoder"`
4
// 分割设置
5
Rotate RotateCfg `json:"rotate",yaml:"rotate",ini:"rotate"`
6
// 日志级别
7
Level int8 `json:"level",yaml:"level",ini:"level"`
8
}
9
10
// 日志输出内容编码设置
11
type EncoderCfg struct {
12
// 时间键内容,默认为 ts
13
TimeKey string `json:"time_key",yaml:"time_key",ini:"time_key"`
14
// 级别键内容,默认为 level
15
LevelKey string `json:"level_key",yaml:"level_key",ini:"level_key"`
16
// 名字键内容,默认为 logger
17
NameKey string `json:"name_key",yaml:"name_key",ini:"name_key"`
18
// 调用者键内容,默认为 caller
19
CallerKey string `json:"caller_key",yaml:"caller_key",ini:"caller_key"`
20
// 消息键内容,默认为 msg
21
MessageKey string `json:"message_key",yaml:"message_key",ini:"message_key"`
22
// 栈键内容,默认为 stacktrace
23
StacktraceKey string `json:"stacktrace_key",yaml:"stacktrace_key",ini:"stacktrace_key"`
24
// 级别编码器,默认为 大写带颜色
25
Level string `json:"level",yaml:"level",ini:"level"`
26
// 时间编码器,默认为 ISO8601
27
Time string `json:"time",yaml:"time",ini:"time"`
28
// 间隔时间编码器,默认为 秒
29
Duration string `json:"duration",yaml:"duration",ini:"duration"`
30
// 调用者编码器,默认为 简短路径
31
Caller string `json:"caller",yaml:"caller",ini:"caller"`
32
// 输出格式,默认console
33
Encoding string `json:"encoding",yaml:"encoding",ini:"encoding"`
34
}
35
36
// 日志分割设置
37
type RotateCfg struct {
38
// 文件最大大小,单位为m,默认为 10m
39
MaxSize int `json:"max_size",yaml:"max_size",ini:"max_size"`
40
// 最多文件数,默认为 5个
41
MaxBackups int `json:"max_backups",yaml:"max_backups",ini:"max_backups"`
42
// 存储最长时间,单位为天,默认为 30天
43
MaxAge int `json:"max_age",yaml:"max_age",ini:"max_age"`
44
// 是否压缩,默认为 不开启
45
Compress bool `json:"compress",yaml:"compress",ini:"compress"`
46
}
Copied!
Last modified 1mo ago