7.5. 基于http提供wiki页面
要使用http包,先将其导入:
import (
"fmt"
"http"
"io/ioutil"
"os"
)
然后创建一个用于浏览wiki的函数:
const lenPath = len("/view/")
func viewHandler(w http.ResponseWriter, r *http.Request) {
title := r.URL.Path[lenPath:]
p, _ := loadPage(title)
fmt.Fprintf(w, "<h1>%s</h1><div>%s</div>", p.title, p.body)
}
首先,这个函数从r.URL.Path(请求URL的path部分)中解析页面标题。全局常量lenPath保存"/view/"的长度,它是请求路径的前缀部分。Path总是以"/view/"开头,去掉前面的6个字符就可以得到页面标题。
然后加载页面数据,格式化为简单的HTML字符串,写到c中,c是一个http.Conn类型的参数。
注意这里使用下划线“_”忽略loadPage的os.Error返回值。 这不是一种好的做法,此处是为了保持简单。我们将在后面考虑这个问题。
为了使用这个处理函数(handler),我们创建一个main函数。它使用viewHandler初始化http,把所有以/view/开头的请求转发给viewHandler处理。
func main() {
http.HandleFunc("/view/", viewHandler)
http.ListenAndServe(":8080", nil)
}
点击这里查看我们当前的代码。
让我们创建一些页面数据(例如as test.txt),编译,运行。
$ echo "Hello world" > test.txt
$ 8g wiki.go
$ 8l wiki.8
$ ./8.out
当服务器运行的时候,访问http://localhost:8080/view/test将显示一个页面,标题为“test”,内容为“Hello world”。