go学习巩固知识点(2)开启go 的本地文档 开发代码更新启动 模板使用
最近 在看go 的相关学习教程,巩固一些知识点。
主要 代码 来自 《G01 Go 实战:Web 入门》 学习中的代码
使用 go 的本地文档
- 安装 godoc
go get golang.org/x/tools/cmd/godoc
- 运行 godoc -http=:6060
- 访问 本地 localhost:6060
代码更新 重新启动
- 安装 air
go get -u github.com/cosmtrek/air
- 运行 air
air
- 之后更改代码会自动更新重启
使用 template 标准库
书接上文 增加一个 文章详情 路由
router.HandleFunc("/articles/{id:[0-9]+}", articlesShowHandler).Methods("GET").Name("articles.show")
修改 articlesShowHandler 方法
func articlesShowHandler(w http.ResponseWriter, r *http.Request) {
// 1 获取 url 参数
id := getRouteVariable("id", r)
// 2 读取数据
article, err := getArticleByID(id)
// 3 判断错误
if err != nil {
if err == sql.ErrNoRows {
// 3.1 未找到
w.WriteHeader(http.StatusNotFound)
fmt.Fprint(w, "404 文章未找到")
} else {
// 3.2 数据库错误
checkError(err)
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprint(w, "500 服务器内部错误")
}
} else {
// 4. 读取成功,显示文章
tmpl, err := template.New("show.gohtml").
Funcs(template.FuncMap{
"RouteName2URL": RouteName2URL,
"Int64ToString": Int64ToString,
}).
ParseFiles("resources/views/articles/show.gohtml")
checkError(err)
tmpl.Execute(w, article)
}
}
func checkError(err error) {
if err != nil {
log.Fatal(err)
}
}
getRouteVariable 是公共获取request 参数方法
func getRouteVariable(parameterName string, r *http.Request) string {
vars := mux.Vars(r)
return vars[parameterName]
}
关于模板的调用,用new发起时可以加额外的参数如使用Funcs方法将一些自定义的方法带到模板中。也可以直接用ParseFiles调用 模板
tmpl, err := template.New("show.gohtml").
Funcs(template.FuncMap{
"RouteName2URL": RouteName2URL,
"Int64ToString": Int64ToString,
}).
ParseFiles("resources/views/articles/show.gohtml")
tmpl, err := template.ParseFiles("resources/views/articles/show.gohtml")
模板代码
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ .Title }} —— 我的技术博客</title>
<style type="text/css">
.error {
color: red;
}
</style>
</head>
<body>
<p>ID: {{ .ID }}</p>
<p>标题: {{ .Title }}</p>
<p>内容:{{ .Body }}</p>
{{/* 构建删除按钮 */}}
{{ $idString := Int64ToString .ID }}
<form action="{{ RouteName2URL "articles.delete" "id" $idString }}" method="post">
<button type="submit" onclick="return confirm('删除动作不可逆,请确定是否继续')">删除</button>
</form>
</body>
</html>
本作品采用《CC 协议》,转载必须注明作者和本文链接