使用go搭建个人博客(一):初始化项目
最近学习了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 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上克隆项目直接跑着看看。之后继续更新,中间遇到的问题和一些解决办法。
转载自:https://juejin.cn/post/6844903621490900999