Go语言博客写作与文档解析

1 文档存储

/source/ 目录,数据源目录,用于存放与文章相关的原始数据,例如 markdown 文件,文章内容使用的图像文件等。可能的子目录有 postimagedraft 等。

其中 /source/post/ 目录用于存储创建的 markdown 文件,就是文章内容。写作的第一个步骤,就是在该目录中创建后缀为 .md 格式的文件,例如 /source/post/hello.md。此处我们先手动创建,后面会使用定义一个命令来创建文章内容模板。

Read More

Go语言解析YAML

1 概述

YAML是”YAML Ain’t a Markup Language”(YAML不是一种置标语言)的递归缩写。YAML 以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。一个典型的 YAML 如下:

1
2
3
4
5
title: 小韩说课
category: go
tag:
- OOP
- GoLang

基本语法为:

  • 使用缩进表示层级关系
  • 禁止使用tab缩进,只能使用空格键
  • 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级

在项目中,配置文件选择 YAML 是常见的选择。

参考文档:

本文介绍在 Go 语言中解析 YAML。

Read More

Go语言中操作MySQL

1 概述

Go 语言程序可以作为 MySQL 服务器的客户端完成 MySQL 数据库的操作。

Go 语言中,使用 database/sql 包实现类 SQL 数据库的操作。sql 包是一个数据库抽象层,具体的数据库操作的实现要依赖于相应的驱动才可以。抽象层与驱动的关系,如下图所示:

数据库抽象层

Go 支持的驱动列表请参考:https://github.com/golang/go/wiki/SQLDrivers,或者 SQL驱动列表

Read More

Go语言中使模板引擎的语法

1 模板界定符

1
{{ }}

是默认的模板界定符。用于在 HTML 模板文件中界定模板语法。例如:

1
2
3
4
5
6
7
8
Hello, {{ .User }}
<br>
你熟悉的技术:
<ul>
{{ range .List }}
<li>{{.}}</li>
{{end}}
</ul>

若需要使用自定义的界定符,使用 func (t *Template) Delims(left, right string) *Template 方法进行定义。后续的解析会识别新定义的界定符。

Read More

Go语言中使用模板引擎

1 概述

处理响应主体时,最常见的方式就是发送处理好的 HTML 代码,由于需要将数据嵌入到 HTML 中,那么模板引擎(template engine)就是最好的选择。

Go语言中,提供了 html/template 包,实现模板引擎的相关功能。快速使用示例:

main.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import (
"html/template"
"log"
"net/http"
)

func main() {
// 设置 处理函数
http.HandleFunc("/", TestAction)
//// 开启监听(监听浏览器请求)
log.Fatal(http.ListenAndServe(":8084", nil))
}

func TestAction(w http.ResponseWriter, r *http.Request) {
// 解析模板
t, _ := template.ParseFiles("template/index.html")
// 设置模板数据
data := map[string]interface{}{
"User": "小韩说课",
"List": []string{"Go", "Python", "PHP", "JavaScript"},
}
// 渲染模板,发送响应
t.Execute(w, data)
}

template/index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>小韩说课</title>
</head>
<body>

Hello, {{ .User }}
<br>

你熟悉的技术:
<ul>
{{ range .List }}
<li>{{.}}</li>
{{end}}
</ul>

</body>
</html>

执行结果:

执行结果

以上代码就完了模板引擎的基本使用,包括解析模板,渲染数据,响应结果操作。接下来详细说明。

Read More

Go中处理响应

1 概述

Go 语言 HTTP 服务器,在启动监听并处理接收的请求时,会将实现了 http.ResponseWriter 接口的 http.Response 对象作为第一个参数传递到请求处理器,示例代码:

1
2
3
4
5
6
7
8
9
func main() {
// 设置 路由
http.HandleFunc("/", IndexAction)·
// 开启监听
log.Fatal(http.ListenAndServe(":8888", nil))
}
func IndexAction(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`<h1 align="center">来自小韩说课的问候</h1>`))
}

示例代码中的参数 w 就是这个响应对象。我们通过该对象完成响应的操作。

Read More

Go中处理请求

1 概述

Go 语言 HTTP 服务器,在启动监听并处理接收的请求时,会将请求相关数据封装成 http.Request 对象,同时作为参数传递到请求处理器中。处理器函数的第二个参数就是对 http.Request 对象的一个引用,示例代码为:

1
2
3
4
5
6
7
8
9
func main() {
// 设置 路由
http.HandleFunc("/", IndexAction)·
// 开启监听
log.Fatal(http.ListenAndServe(":8888", nil))
}
func IndexAction(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`<h1 align="center">来自小韩说课的问候</h1>`))
}

Read More