最近学习了Go的一些基本知识之后,决定实践一下。因为个人博客是比较常见和比较简单的联系实例,所以就打算再精简一下需求,做一个比较简单的个人博客,来了解Go语言在Web服务上的基本使用。
考虑需要实现的功能
一个简化版的个人博客,满足基本需求即可。
- 存在一个可以用来管理
md
文件的工具,该工具能将本地的md
文件,也就是写好的博客,能上传到服务器上,或者进行根据文章标题进行文章文件的删除等。该工具就模仿hexo
博客系统做一个命令行工具吧,简单也直接。 - Web前端页面:1. 存在一个主页用来显示所有的文章,这里就以一个列表的形式存在。 2. 列表每项,有文章的基本信息,例如:标题、上传时间、文章字数等。3. 文章内容页。 4. 支持进行分类和标签检索相应文章。
- Web服务端: 1. 提供查询所有文章、根据分类
ID
查询对于文章列表、根据标签ID
查询对于文章列表等API。 2. 提供将md
文件转成HTML
字符串的功能,最后一接口形式暴露。 3. 接收文件,并分析md
文件,将相应的信息存入数据库。
大概整个系统由上面三个部分组成。
采用前前后端分离的模式
- 后端 :
- 对于Go语言的Web框架有很多,哪怕是使用内置的
net/http
也能比较方便的书写Web服务,所以这里选择比较轻量、比较简单的Web框架gin
; - 因为数据库的业务很少,不需要存储大量的相关信息,只需要存储一个文章的标签、标题、分类和时间等,所以就直接使用轻量级的
Sqlite
数据库,直接以db
文件形式存放; - 数据库的
ORM
工具,国内有比较火的xorm
,就直接拿来使用了,文档算是很全面的,实在不行就直接写sql
也是可以的。
- 对于Go语言的Web框架有很多,哪怕是使用内置的
-
前端:
- 如今前端比较流行构建单页面应用,本人目前也是一个前端程序员,就拿自己熟悉的
React
来构建吧。 UI
框架,选用Google
的Material-ui
,个人感觉还是比较漂亮的UI
库。
- 如今前端比较流行构建单页面应用,本人目前也是一个前端程序员,就拿自己熟悉的
-
命令行工具:
- 我在google上找了会,也有现成的库(cli)可以用。
初始化项目
- 首先我们在
$GOPATH/src/github.com/[your_name]/
创建一个blog
文件夹,姑且就这样命名吧。无所谓~ -
使用的是前后端分离的模式,我这里创建如下几个文件夹:
- cmd 用来开发命令行工具
- controllers 用来存放后端的控制器,一些操作,一些功能。* database 存放数据库的配置和连接数据库的操作。
- front_web 用来存放
React
项目。 - models 存放使用
xorm
对应数据库表的模板(一些数据结构Struct) - posts 由于是比较简单的系统,我就直接将客户端上传的文章放在了这个文件夹。
- routers 后端接口(路由)
- static Web静态文件夹
- main.go 整个程序的主入口。
-
使用
gin
创建一个Http
服务:-
使用
get
工具,将gin
依赖安装到本地,gin文档go get github.com/gin-gonic/gin
-
在
mian.go
中导入gin
,然后创建服务。package main
import (
"io"
"os"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.New()
// 设置日志文件
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f, os.Stdout)
// 使用日志中间件
r.Use(gin.Logger())
// 设置静态文件夹
r.Static("/static", "./static")
r.Run(":8888")
} -
运行该
main.go
文件,就可以看到启动信息,然后在浏览器中输入http://localhost:8888/
就可以访问了,虽然现在什么都没有。
-
最后
该项目示例已经写完放在github
上了,这只是第一篇,用来介绍功能和怎么样来初始化项目的。大家在留言一起讨论或者去我的github上克隆项目直接跑着看看。之后继续更新,中间遇到的问题和一些解决办法。