多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 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](http://localhost:8080/view/test)将显示一个页面,标题为“test”,内容为“Hello world”。