gin blog

  1. 安装go
  2. 初始工作区
  3. 初始化项目目录
  4. 创建数据库
  5. 编写项目配置包
  6. 编写API错误码包
  7. 编写工具包

安装go

参考:go 1.03 环境搭建

初始工作区

1
2
3
#安装govendor
go get -u github.com/kardianos/govendor
tree $GOPATH

查看GOPATH目录

1
2
3
4
5
6
7
8
9
$GOPATH
├── bin
│   └── govendor
├── src
│   └── github.com
│   └── kardianos
│   └── govendor
│   ├── appveyor.yml
│   ├...

安装gin

1
2
go get -u github.com/gin-gonic/gin
tree $GOPATH

再次查看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.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
project_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
2
3
4
5
6
7
8
9
10
11
cd src
bash init_dir.sh
tree gin-blog

gin-blog/
├── conf
├── middleware
├── models
├── pkg
├── routers
└── runtime

conf:用于存储配置文件
middleware:应用中间件
models:应用数据库模型
pkg:第三方包
routers 路由逻辑处理
runtime 应用运行时数据

创建数据库

1
2
3
4
5
#!/bin/bash
docker stop mysql && docker rm mysql
docker run --restart="always" --name mysql -v /data/mysql_data:/var/lib/mysql -v /etc/mysql:/etc/mysql -e MYSQL_ROOT_PASSWORD=Pw123456 -p 3306:3306 -d mysql:5.7
docker exec -it mysql /bin/bash
mysql -uroot -p

创建库

1
2
CREATE DATABASE IF NOT EXISTS blog default charset utf8 COLLATE utf8_general_ci;
use blog;

标签表

1
2
3
4
5
6
7
8
9
10
11
CREATE 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
14
CREATE 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
8
CREATE 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.go

1
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
60
package 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
16
package 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
23
package 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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏