使用这个GoAdminGroup/go-admin框架的最简单的例子就可以把项目运行起来 , go-admin 是以扩展库的形式使用的.
建一个main.go
package main
import (
"io/ioutil"
"log"
"os"
"os/signal"
_ "github.com/GoAdminGroup/go-admin/adapter/gin"
_ "github.com/GoAdminGroup/go-admin/modules/db/drivers/mysql"
_ "github.com/GoAdminGroup/themes/sword"
"github.com/GoAdminGroup/go-admin/engine"
"github.com/GoAdminGroup/go-admin/examples/datamodel"
"github.com/GoAdminGroup/go-admin/modules/config"
"github.com/GoAdminGroup/go-admin/modules/language"
"github.com/GoAdminGroup/go-admin/plugins/example"
"github.com/GoAdminGroup/go-admin/template"
"github.com/GoAdminGroup/go-admin/template/chartjs"
"github.com/GoAdminGroup/themes/adminlte"
"github.com/gin-gonic/gin"
)
func main() {
gin.SetMode(gin.ReleaseMode)
gin.DefaultWriter = ioutil.Discard
r := gin.New()
e := engine.Default()
cfg := config.Config{
Env: config.EnvLocal,
Databases: config.DatabaseList{
"default": {
Host: "127.0.0.1",
Port: "3306",
User: "goadmin",
Pwd: "goadmin",
Name: "goadmin",
MaxIdleCon: 50,
MaxOpenCon: 150,
Driver: config.DriverMysql,
//Driver: config.DriverSqlite,
//File: "../datamodel/admin.db",
},
},
UrlPrefix: "admin",
Store: config.Store{
Path: "./uploads",
Prefix: "uploads",
},
Language: language.CN,
IndexUrl: "/",
Debug: true,
AccessAssetsLogOff: true,
Animation: config.PageAnimation{
Type: "fadeInUp",
},
ColorScheme: adminlte.ColorschemeSkinBlack,
BootstrapFilePath: "./../datamodel/bootstrap.go",
}
template.AddComp(chartjs.NewChart())
// customize a plugin
examplePlugin := example.NewExample()
// load from golang.Plugin
//
// examplePlugin := plugins.LoadFromPlugin("../datamodel/example.so")
// customize the login page
// example: https://github.com/GoAdminGroup/demo.go-admin.cn/blob/master/main.go#L39
//
// template.AddComp("login", datamodel.LoginPage)
// load config from json file
//
// e.AddConfigFromJSON("../datamodel/config.json")
if err := e.AddConfig(cfg).
AddGenerators(datamodel.Generators).
// add generator, first parameter is the url prefix of table when visit.
// example:
//
// "user" => http://localhost:9033/admin/info/user
//
AddGenerator("user", datamodel.GetUserTable).
AddDisplayFilterXssJsFilter().
AddPlugins(examplePlugin).
Use(r); err != nil {
panic(err)
}
r.Static("/uploads", "./uploads")
// customize your pages
e.HTML("GET", "/admin", datamodel.GetContent)
go func() {
_ = r.Run(":9033")
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt)
<-quit
log.Print("closing database connection")
e.MysqlConnection().Close()
}
注意数据库用户名和密码 , 直接运行go run main.go , 在开启go module的情况下 , 所有依赖会自动安装
访问 http://localhost:9033/admin 用户名密码:admin / admin

建一个数据库 , 把数据库sql导进去
# ************************************************************
# Sequel Pro SQL dump
# Version 4468
#
# http://www.sequelpro.com/
# https://github.com/sequelpro/sequelpro
#
# Host: 127.0.0.1 (MySQL 5.7.19)
# Database: godmin
# Generation Time: 2019-09-12 04:16:47 +0000
# ************************************************************
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
# Dump of table goadmin_menu
# ------------------------------------------------------------
DROP TABLE IF EXISTS `goadmin_menu`;
CREATE TABLE `goadmin_menu` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(11) unsigned NOT NULL DEFAULT '0',
`type` tinyint(4) unsigned NOT NULL DEFAULT '0',
`order` int(11) unsigned NOT NULL DEFAULT '0',
`title` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`icon` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`uri` varchar(3000) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`header` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`plugin_name` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`uuid` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
LOCK TABLES `goadmin_menu` WRITE;
/*!40000 ALTER TABLE `goadmin_menu` DISABLE KEYS */;
INSERT INTO `goadmin_menu` (`id`, `parent_id`, `type`, `order`, `title`, `icon`, `uri`, `plugin_name`%9%EU-d}}4(9%9U1P
!IMPЁ
=11Q}4)1=
,Q 1L}}]I%Q1QHQ 1}}%M 1-eL4)%9MIP%9Q<}}}}р}р4)Y1UL4(4(4(1QHQ 1}}9 1-eLU91=
,Q 1L4(4(х}(4(4)I=@Q 1%a%MQL}4)
IQQ 1}4(Р9=P9U10UQ=}%9
I59P4(
=11Q}9=P9U104(
=11Q}9=P9U104(}р9U10U1P
UII9Q}Q%5MQ5@4(}р9U10U1P
UII9Q}Q%5MQ5@4(AI%5Id-d4(U9%EU-d}}4(9%9U1P
!IMPЁ
=11Q}4)1=
,Q 1L}]I%Q1QHQ 1}%M 1-eL4)%9MIP%9Q<}}р}р4)Y1UL4(4(=4(1QHQ 1}9 1-eLU91=
,Q 1L4(4(х}4(4(4)I=@Q 1%a%MQL}4)
IQQ 1}4(Р9=P9U10UQ=}%9
I59P4(
!I
QHMPЁ
=11Q}9=P9U10U1P4(
!I
QHMPЁ
=11Q}9=P9U10U1P4(}р9U10U1P
UII9Q}Q%5MQ5@4(}р9U10U1P
UII9Q}Q%5MQ5@4(AI%5Id-d4(9%9U1P
!IMP4(4(4(4(х}(4(4)I=@Q 1%a%MQL}4)
IQQ 1}4(Р9=P9U104(}Р9=P9U104(}р9U10U1P
UII9Q}Q%5MQ5@4(}р9U10U1P
UII9Q}Q%5MQ5@4(U9%EU-d}}4(9%9U1P
!IMPЁ
=11Q}4)1=
,Q 1L}]I%Q1QHQ 1}%M 1-eL4)%9MIP%9Q<}}}р}р4)Y1UL4(4(4(1QHQ 1}9 1-eLU91=
,Q 1L4(4(х}4(4(4)I=@Q 1%a%MQL}4)
IQQ 1}4(Р9=P9U10UQ=}%9
I59P4(
=11Q}9=P9U104(ɑ
=11Q}9=P9U10U1P4(
=11Q}9=P9U104(х
=11Q}U1P9U104(
=11Q}U1P9U104(}р9U10U1P
UII9Q}Q%5MQ5@4(}р9U10U1P
UII9Q}Q%5MQ5@4(AI%5Id-d4(U9%EU-d}}}4(9%9U1P
!IMPЁ
=11Q}4)1=
,Q 1L}]I%Q1QHQ 1}%M 1-eL4)%9MIP%9Q<}ɑх}р}р4)Y1UL4(T9MY =iaIea5
a9 Y,e -)I)!=U4(=8I@ia)1=)i=9U104(1QHQ 1}9 1-eLU91=
,Q 1L4(4(4(āMPME1}9=QL}ME1}9=QLāMPME1}5=}ME1}5=ЁMP=I%9}-e}
!
-L}=I%9}-e}
!
-LāMP
!I
QI}MQ}
1%9P}
!I
QI}MQ}
1%9PāMP
!I
QI}MQ}IMU1QL}
!I
QI}MQ}IMU1QLāMP
=11Q%=9}
=99
Q%=8}
=11Q%=9}
=99
Q%=84(屔4("j'J3jVg/jZ"nkn'J3碾Bs&7jZ"[#vjnZroB;kkR2 |