gin blog
安装go
参考:go 1.03 环境搭建
初始工作区
1 | #安装govendor |
查看GOPATH目录1
2
3
4
5
6
7
8
9$GOPATH
├── bin
│ └── govendor
├── src
│ └── github.com
│ └── kardianos
│ └── govendor
│ ├── appveyor.yml
│ ├...
安装gin
1 | go get -u github.com/gin-gonic/gin |
再次查看GOPATH目录1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20$GOPATH
├── bin
│ └── govendor
├── src
│ ├── github.com
│ │ ├── gin-contrib
│ │ │ └── sse
│ │ ├── gin-gonic
│ │ │ └── gin
│ │ ├── golang
│ │ ├── kardianos
│ │ │ └── govendor
│ │ ├── mattn
│ │ └── ugorji
│ │ └── go
│ ├── gopkg.in
│ │ ├── go-playground
│ │ │ └── validator.v8
│ │ └── yaml.v2
│ │ ├── apic.go
初始化项目目录
cat init_dir.sh1
2
3
4
5
6
7
8
9
10
11
12
13
14
15project_dir=(
conf
middleware
models
pkg
routers
runtime
)
pre_dir='gin-blog'
for dir in ${project_dir[@]};
do
#echo $dir
mkdir -v -p ${pre_dir}/${dir}
done
1 | cd src |
conf:用于存储配置文件
middleware:应用中间件
models:应用数据库模型
pkg:第三方包
routers 路由逻辑处理
runtime 应用运行时数据
创建数据库
1 |
|
创建库1
2CREATE DATABASE IF NOT EXISTS blog default charset utf8 COLLATE utf8_general_ci;
use blog;
标签表1
2
3
4
5
6
7
8
9
10
11CREATE TABLE `blog_tag` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT '' COMMENT '标签名称',
`created_on` int(10) unsigned DEFAULT '0' COMMENT '创建时间',
`created_by` varchar(100) DEFAULT '' COMMENT '创建人',
`modified_on` int(10) unsigned DEFAULT '0' COMMENT '修改时间',
`modified_by` varchar(100) DEFAULT '' COMMENT '修改人',
`deleted_on` int(10) unsigned DEFAULT '0',
`state` tinyint(3) unsigned DEFAULT '1' COMMENT '状态 0为禁用、1为启用',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章标签管理';
文章表1
2
3
4
5
6
7
8
9
10
11
12
13
14CREATE TABLE `blog_article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tag_id` int(10) unsigned DEFAULT '0' COMMENT '标签ID',
`title` varchar(100) DEFAULT '' COMMENT '文章标题',
`desc` varchar(255) DEFAULT '' COMMENT '简述',
`content` text,
`created_on` int(11) DEFAULT NULL,
`created_by` varchar(100) DEFAULT '' COMMENT '创建人',
`modified_on` int(10) unsigned DEFAULT '0' COMMENT '修改时间',
`modified_by` varchar(255) DEFAULT '' COMMENT '修改人',
`deleted_on` int(10) unsigned DEFAULT '0',
`state` tinyint(3) unsigned DEFAULT '1' COMMENT '状态 0为禁用1为启用',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章管理';
认证表1
2
3
4
5
6
7
8CREATE TABLE `blog_auth` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT '' COMMENT '账号',
`password` varchar(50) DEFAULT '' COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `blog`.`blog_auth` (`id`, `username`, `password`) VALUES (null, 'test', 'test123456');
编写项目配置包
1 | go get -u github.com/go-ini/ini |
在gin-blog的conf目录下新建app.ini文件,写入内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#debug or release
RUN_MODE = debug
[app]
PAGE_SIZE = 10
JWT_SECRET = 164ebd68
[server]
HTTP_PORT = 8000
READ_TIMEOUT = 60
WRITE_TIMEOUT = 60
[database]
TYPE = mysql
USER = root
PASSWORD = Pw123456
#127.0.0.1:3306
HOST = 127.0.0.1:3306
NAME = blog
TABLE_PREFIX = blog_
建立调用配置的setting模块,在gin-blog的pkg目录下新建setting目录,新建setting.go文件,写入内容:
setting.go1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60package setting
import (
"log"
"time"
"github.com/go-ini/ini"
)
var (
Cfg *ini.File
RunMode string
HTTPPort int
ReadTimeout time.Duration
WriteTimeout time.Duration
PageSize int
JwtSecret string
)
func init() {
var err error
Cfg, err = ini.Load("conf/app.ini")
if err != nil {
log.Fatalf("Fail to parse 'conf/app.ini': %v", err)
}
LoadBase()
LoadServer()
LoadApp()
}
func LoadBase() {
RunMode = Cfg.Section("").Key("RUN_MODE").MustString("debug")
}
func LoadServer() {
sec, err := Cfg.GetSection("server")
if err != nil {
log.Fatalf("Fail to get section 'server': %v", err)
}
RunMode = Cfg.Section("").Key("RUN_MODE").MustString("debug")
HTTPPort = sec.Key("HTTP_PORT").MustInt(8000)
ReadTimeout = time.Duration(sec.Key("READ_TIMEOUT").MustInt(60)) * time.Second
WriteTimeout = time.Duration(sec.Key("WRITE_TIMEOUT").MustInt(60)) * time.Second
}
func LoadApp() {
sec, err := Cfg.GetSection("app")
if err != nil {
log.Fatalf("Fail to get section 'app': %v", err)
}
JwtSecret = sec.Key("JWT_SECRET").MustString("!@)*#)!@U#@*!@!)")
PageSize = sec.Key("PAGE_SIZE").MustInt(10)
}
当前目录结构1
2
3
4
5
6
7
8
9
10../gin-blog/
├── conf
│ └── app.ini
├── middleware
├── models
├── pkg
│ └── setting
│ └── setting.go
├── routers
└── runtime
编写API错误码包
建立错误码的e模块,在gin-blog的pkg目录下新建e目录,新建code.go和msg.go文件,写入内容:
code.go:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package e
const (
SUCCESS = 200
ERROR = 500
INVALID_PARAMS = 400
ERROR_EXIST_TAG = 10001
ERROR_NOT_EXIST_TAG = 10002
ERROR_NOT_EXIST_ARTICLE = 10003
ERROR_AUTH_CHECK_TOKEN_FAIL = 20001
ERROR_AUTH_CHECK_TOKEN_TIMEOUT = 20002
ERROR_AUTH_TOKEN = 20003
ERROR_AUTH = 20004
)
msg.go:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23package e
var MsgFlags = map[int]string {
SUCCESS : "ok",
ERROR : "fail",
INVALID_PARAMS : "请求参数错误",
ERROR_EXIST_TAG : "已存在该标签名称",
ERROR_NOT_EXIST_TAG : "该标签不存在",
ERROR_NOT_EXIST_ARTICLE : "该文章不存在",
ERROR_AUTH_CHECK_TOKEN_FAIL : "Token鉴权失败",
ERROR_AUTH_CHECK_TOKEN_TIMEOUT : "Token已超时",
ERROR_AUTH_TOKEN : "Token生成失败",
ERROR_AUTH : "Token错误",
}
func GetMsg(code int) string {
msg, ok := MsgFlags[code]
if ok {
return msg
}
return MsgFlags[ERROR]
}
编写工具包
在gin-blog的pkg目录下新建util目录
拉取com的依赖包1
go get -u github.com/Unknwon/com
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rootid@126.com
文章标题:gin blog
本文作者:Shawn
发布时间:2019-06-06, 11:50:00
最后更新:2019-07-30, 17:57:59
原始链接:https://gitrootid.github.io/2019/06/06/golang/gin-blog_/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。