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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!