Gin實踐 連載二 搭建Blog API’s(一)

NO IMAGE

Gin搭建Blog API’s (一)

專案地址:https://github.com/EDDYCJY/go…

思考

首先,在一個初始專案開始前,大家都要思考一下

各種的程式配置寫在程式碼中,好嗎
API的錯誤碼硬編在程式中,合適嗎
db控制代碼誰都去Open

初始化專案目錄

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

conf:用於儲存配置檔案
middleware:應用中介軟體
models:應用資料庫模型
pkg:第三方包
routers 路由邏輯處理
runtime 應用執行時資料

初始專案資料庫

新建blog

2、 文章表

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 '修改人',
  `state` tinyint(3) unsigned DEFAULT '1' COMMENT '狀態 0為禁用1為啟用',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章管理';

3、 認證表

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');

編寫專案配置包

拉取go-ini/ini

我們需要編寫基礎的應用配置檔案,在gin-blog

建立呼叫配置的setting

當前的目錄結構:

gin-blog/
├── conf
│   └── app.ini
├── middleware
├── models
├── pkg
│   └── setting
│       └── setting.go
├── routers
├── runtime

編寫API錯誤碼包

建立錯誤碼的e

2、 msg.go:

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
if ok { return msg } return MsgFlags[ERROR] }

編寫工具包

gin-blog

編寫分頁頁碼的獲取方法

util

編寫models init

拉取gorm

拉取mysql

完成後,在gin-blog

編寫專案啟動、路由檔案

最基礎的準備工作完成啦,讓我們開始編寫Demo吧!

編寫Demo

gin-blog

執行go run main.go

在本機執行curl 127.0.0.1:8000/test

Addr:監聽的TCP地址,格式為:8000

開始監聽服務,監聽TCP網路地址,Addr和呼叫應用程式處理連線上的請求。

我們在原始碼中看到Addr

通過分析原始碼,得知本質上沒有區別,同時也得知了啟動gin

大家可以看到預設情況下,已經附加了日誌、恢復中介軟體的引擎例項。並且在開頭呼叫了debugPrintWARNINGDefault()

而另外一個Running in "debug" mode. Switch to "release" mode in production.

修改main.go

當前目錄結構:

gin-blog/
├── conf
│   └── app.ini
├── main.go
├── middleware
├── models
│   └── models.go
├── pkg
│   ├── e
│   │   ├── code.go
│   │   └── msg.go
│   ├── setting
│   │   └── setting.go
│   └── util
│       └── pagination.go
├── routers
│   └── router.go
├── runtime

重啟服務,執行curl 127.0.0.1:8000/test檢視是否正確返回。

下一節,我們將以我們的Demo為起點進行修改,開始編碼!

參考

本系列示例程式碼

go-gin-example

本系列目錄

Gin實踐 連載一 Golang介紹與環境安裝
Gin實踐 連載二 搭建Blog API's(一)
Gin實踐 連載三 搭建Blog API's(二)
Gin實踐 連載四 搭建Blog API's(三)
Gin實踐 連載五 搭建Blog API's(四)
Gin實踐 連載六 搭建Blog API's(五)
Gin實踐 連載七 Golang優雅重啟HTTP服務
Gin實踐 連載八 為它加上Swagger
Gin實踐 連載九 將Golang應用部署到Docker
Gin實踐 連載十 定製 GORM Callbacks
Gin實踐 番外 Golang交叉編譯