【码神之路】【Golang】博客网站的搭建【学习笔记整理 持续更新...】

介绍

一个用原生GO开发的博客网站,涉及Golang Web开发Web服务器搭建HTTP请求处理、模板与静态资源处理等

涉及到的技术栈

    后端:Go、Go并发机制
	前端:HTML模版

链接直达

Golang搭建博客网站的学习视频
网页首页
文章详细页

注:这里我只记录我实质✅学习到的知识点,对于一些抄抄写写的内容我就不过多赘述。

一、环境部署

1、设置下载Go模块的代理

为了提高获取Go模块的可靠性和速度,设置Go模块的中国代理服务器https://goproxy.cn ,如图:
设置go模块的代理

2、使用GO的template包解析HTML模版,生成动态页面

在这里插入图片描述
在这里插入图片描述

二、静态资源加载

思路

  • 在main文件设置路由和对应的handlerFunc()处理函数
  • 操作view包和api包,用定义好的数据结构来渲染页面

1、总结各种ERR处理

(1) panic(err) //立即停止并报告错误
(2) log.Println(“解析模版出错”,err) //日志报告错误
在这里插入图片描述

2、路由设置

在这里插入图片描述

(1)、/路由规则:调用自定义index处理器

(2)、/resource 路由规则:给文件创建HTTP服务(这些文件可通过以/resource/为前缀的URL来访问)

即 修改请求URL,并使得用户可以直接访问/resource下的文件

http.Handle("/resource", http.StripPrefix("/resource/", http.FileServer(http.Dir("public/resource/"))) )

解析:

  • http.Dir(“public/resource/”): 将字符串 “public/resource/” 转换成 http.Dir 类型
  • http.FileServer(…): 生成 HTTP 文件 处理器:所有位于 public/resource/ 目录下的文件都可以通过HTTP请求直接访问
  • http.StripPrefix(“/resource/”, …):修改进入的HTTP请求的URL路径(每个请求URL移除指定前缀 例 :http://[服务器地址]/resource/a.txt------->http://[服务器地址]/a.txt

举例:HTTP请求-----> http://localhost:8081/resource/a.jpg :
第1步. StripPrefix() 将URL修改为http://localhost:8081/a.jpg
第2步. 将修改后的请求传递给它的参数(即http.FileServer 创建的处理器

3、关于Cfg变量(包含程序的基础配置信息)

在这里插入图片描述

解析:

  • config.Cfg:Config包中定义好的变量(这是一个tomlConfig类型的指针)
  • config.Cfg.SystemConfig.CurrentDir:变量的属性

在这里插入图片描述

在这里插入图片描述

4、Template的封装

(1)、定义结构体(models/template.go文件)

在这里插入图片描述

  • 理解这个方法⚠️⚠️⚠️
func (t *TemplateBlog) WriteData(w io.Writer, data interface{}) { 
//w:io.Writer接口的实例                 data:空接口(可任何类型)
	t.Execute(w, data)
}

解析:

  • 接收器:(t *TemplateBlog)是一个接收器(写在方法名前面),接收器表示这个方法是属于这个 类型(templateBlog)的实例(可以通过实例调用这个类型里面的方法/字段,如:t.excute(…) ),两种类型的接收器:

    • 值接收器:使用类型的值的副本调用方法。
    • 指针接收器:使用类型实例的指针调用方法(方法可以直接修改接收器所指向的实例,如:t可以被修改
  • 上文使用指针接收器(好处):WriteData (…)可以修改 t 指向的 TemplateBlog 实例

  • t.Execute(…) [ *TemplateBlog / *template.Template / Execute() ]:渲染模板(将数据应用到模板),并修改实例t。以下为t.Excute()的工作原理:

    1. 模板定义和解析:template.ParseFiles()
    2. 解析后的模板对象 存入变量
    3. 执行渲染 即执行t.Excute():遍历模版文所有文本,将文本替换成对应值,并将结果写入io.Writer类型 的 变量

上面例子:data 提供了模板中用于替换的动态数据(与模板中的占位符对应),w 是执行渲染后解析后的HTML 被写入的目的地(比如文件、HTTP响应体),通俗理解:
htmlTemplate + data ------> w

(2)、

三、配置数据库

思路

  • 使用GO的database/sql包 驱动 数据库,配置数据库参数
  • 首页真实数据处理
    1. 分类查询:SQL数据库查询,再映射到Go结构中
    2. 文章查询:SQL实现分页查询逻辑
  • 分类文章:根据分类ID查询对应文章

1、GO的database/sql标准库连接数据库

2、定义go结构体,使用ORM框架 映射 数据库数据

3、实现分页查询和数据组装的业务逻辑

4、视图层 分页逻辑

四、实现登录功能

思路

  • GO 渲染HTML模版,定义处理HTTP请求的函数,实现登录功能
  • 创建数据模型(UserUserInfo:用户登录信息),通过生成JWT实现用户认证
  • 定义 显示文章详情的视图函数(从HTTP请求中获取文章ID,并进行查询)

1、特定URL

2、与数据库交互

3、加密和安全

使用MD5对密码进行加密处理,使用JWT进行用户会话管理

4、JSON处理

解析(生成)JSON格式响应体(请求体)

5、 服务层逻辑

实现用户登录和文章详情获取的业务逻辑

五、实现文章写作功能

思路:

  • 使用GO渲染HTML模版实现编辑文章的页面;
  • 定义文章结构体,实现文章发布和编辑的接口,包括身份验证、文章CRUD处理 以及数据库交互;(JWT身份验证、GO数据库包)
  • 使用七牛云存储服务以及其提供的**软件开发工具包(SDK)**来实现图片上传功能;(七牛云存储、SDK集成、Token生成)

1、写作页面

2、文章发布和编辑

3、图片上传

六、实现归档搜索功能

注:归档:按照特定的时间顺序展示文章

思路:

  • 定义归档路由,Go模版生成文章归档的页面,后端部分:获取所有的文章,按照日期顺序分类整理
  • 自定义功能:允许用户根据slug实现自定义url来访问特定页面
    注:比如https://www.baicao.com/posts/a1 中,a1就是一个slug
    *定义搜索路由,后端实现(据关键词搜索文章标题)查询文章的逻辑

1、定义HTTP路由(归档和搜索)

2、使用GO模版生成HTML页面

3、数据库交互

使用SQL查询来从数据库中检索文章数据,支持条件查询和全文搜索

4、数据处理

后端实现数据处理的逻辑,如文章的按月分类、搜索结果的生成。

七、优化工作

思路

  • 数据库优化查询:
  • 服务启动优化:
  • 获取参数优化

1、

2、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小雨星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值