最近学习了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](https://github.com/urfave/cli))可以用。
初始化项目
- 首先我们在
$GOPATH/src/github.com/[your_name]/
创建一个blog
文件夹,姑且就这样命名吧。无所谓~ - 使用的是前后端分离的模式,我这里创建如下几个文件夹:
* cmd 用来开发命令行工具
* controllers 用来存放后端的控制器,一些操作,一些功能。\* database 存放数据库的配置和连接数据库的操作。
* front\_web 用来存放`React`项目。
* models 存放使用`xorm`对应数据库表的模板(一些数据结构Struct)
* posts 由于是比较简单的系统,我就直接将客户端上传的文章放在了这个文件夹。
* routers 后端接口(路由)
* static Web静态文件夹
* main.go 整个程序的主入口。
1. 使用`gin`创建一个`Http`服务:
* 使用`get`工具,将`gin`依赖安装到本地,[gin文档](https://github.com/gin-gonic/gin)
1
复制代码go get github.com/gin-gonic/gin
* 在`mian.go`中导入`gin`,然后创建服务。
1
复制代码package mainimport ( "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上克隆项目直接跑着看看。之后继续更新,中间遇到的问题和一些解决办法。
本文转载自: 掘金