本文共 999 字,大约阅读时间需要 3 分钟。
转载的地址
要使用net/http包,必须导入:
import ( "fmt" "io/ioutil" "net/http" // 注意这里)
让我们创建一个允许用户查看Wiki页面的处理程序viewHandler。它将处理前缀为"/view/"的URL。
func viewHandler(w http.ResponseWriter, r *http.Request) { title := r.URL.Path[len("/view/"):] p, _ := loadPage(title) fmt.Fprintf(w, "%s
%s", p.Title, p.Body)}
再次注意,使用`_`来忽略loadPage的错误返回值。
这样做是为了简单起见,通常被认为是不好的做法。 后面会讨论这个问题。 首先,此函数从r.URL.Path中提取页面标题,r.URL.Path是请求URL的路径组件。 使用[len("/view/"):]重新切片路径以删除请求路径的前导"/view/"组件。 这是因为路径总是以"/view/"开头,这不是页面标题的一部分。 然后,该函数加载页面数据,使用一串简单的HTML格式化页面,并将其写入w,即http.ResponseWriter。 要使用此处理程序,我们重写main函数以使用viewHandler初始化http以处理path /view/下的任何请求。func main() { http.HandleFunc("/view/", viewHandler) log.Fatal(http.ListenAndServe(":8090", nil))}
我们创建一些页面数据(作为test.txt),编译我们的代码,并尝试提供维基页面。
在编辑器中打开test.txt文件,并在其中保存字符串"I Like Gowhich"(不带引号)。$ go build wiki.go$ ./wiki
运行此Web服务器后,访问http://localhost:8090/view/test应显示一个标题为"test"的页面,其中包含"I Like Gowhich"字样。
但是访问其他页面的时候,则程序会报错。这个问题我们后面慢慢解决