使用go搭建个人博客(一):初始化项目

8,280 阅读3分钟

  最近学习了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也是可以的。
  • 前端:

    • 如今前端比较流行构建单页面应用,本人目前也是一个前端程序员,就拿自己熟悉的React来构建吧。
    • UI框架,选用GoogleMaterial-ui,个人感觉还是比较漂亮的UI库。
  • 命令行工具:

    • 我在google上找了会,也有现成的库(cli)可以用。

初始化项目

  1. 首先我们在$GOPATH/src/github.com/[your_name]/创建一个blog文件夹,姑且就这样命名吧。无所谓~
  2. 使用的是前后端分离的模式,我这里创建如下几个文件夹:

    • cmd 用来开发命令行工具
    • controllers 用来存放后端的控制器,一些操作,一些功能。* database 存放数据库的配置和连接数据库的操作。
    • front_web 用来存放React项目。
    • models 存放使用xorm对应数据库表的模板(一些数据结构Struct)
    • posts 由于是比较简单的系统,我就直接将客户端上传的文章放在了这个文件夹。
    • routers 后端接口(路由)
    • static Web静态文件夹
    • main.go 整个程序的主入口。

    我的目录

    1. 使用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上克隆项目直接跑着看看。之后继续更新,中间遇到的问题和一些解决办法。