4.05 Go Web程序(4)|Go主题月

275 阅读2分钟

  上一章节中介绍了如何在Go中进行http服务简单搭建,了解之后就让我们继续搭建一个简易的Web端应用。

编写代码

首先修改我们之前引入的包:

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

接下来创建一个处理器,该处理器主要处理用户访问请求,该处理器前缀为/view/

func viewHandler(w http.ResponseWriter, r *http.Request) {
    title := r.URL.Path[len("/view/"):]
    p, _ := loadPage(title)
    fmt.Fprintf(w, "<h1>%s</h1><div>%s</div>", p.Title, p.Body)
}

同样,请注意使用_来忽略loadPage的错误返回值。这里这样做是为了简单起见,通常被认为是不好的做法。我们以后再讨论这个问题。

首先,这个函数从r.URL中提取页面标题。路径请求URL的路径组件。接着进行该路径[len("/view/"):]截取,删除请求路径的前缀"/view/"。这是因为路径总是以“/view/”开头,而这不是页面标题的一部分。

然后,该函数加载页面数据,用简单的HTML字符串格式化页面,并将其写入w,即http.ResponseWriter

为了使用这个处理程序,我们重写了我们的主函数,使用viewHandler来初始化http,以处理路径/view/下的任何请求。

func main() {
    http.HandleFunc("/view/", viewHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

让我们创建一些页面数据(如test.txt),编译我们的代码,并尝试提供一个wiki页面。

在编辑器中打开test.txt文件,并在其中保存字符串“Hello world”(不带引号)。

接下来我们进行访问请求:

[root@montos-prod gowiki]# curl -i  http://127.0.0.1:6666/view/TestPage
HTTP/1.1 200 OK
Date: Sat, 03 Apr 2021 06:35:08 GMT
Content-Length: 50
Content-Type: text/html; charset=utf-8

<h1>TestPage</h1><div>This is a sample Page.</div>

总结

  通过上面完成了一个简单的读取当前文件夹里面内容进行展示的功能框架,接下来就是对其进行一个补充。