上一章节中,我们初步完成了一个简单的命令行文件展示内容。在开始一个
web
工程之前,我们先介绍下net/http
包。
Demo
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":6666", nil))
}
main
函数以对http
的调用开始。HandleFunc
它告诉http
包使用handler
处理所有到web
根目录("/")的请求。
然后调用http.ListenAndServe
,指定监听任意接口的8080
端口(:8080
)。(现在不必担心它的第二个参数nil。)此函数将阻塞,直到程序终止。
ListenAndServe
总是返回错误,因为它只在发生意外错误时返回。为了记录该错误,我们将函数调用包装为log.fatal
。
函数处理程序的类型是http.HandlerFunc
。它需要一个http.ResponseWriter
和http
。请求作为它的参数。
一个http.ResponseWriter value
组装HTTP服务器的响应;通过向它写入数据,我们将数据发送到HTTP客户机。
一个http.Request
是表示客户机HTTP
请求的数据结构。r.URL.Path
是请求URL
的路径组件。末尾的[1:]表示:创建从第一个字符到最后的路径的部分。这将从路径名中删除开头的“/”。
运行上述的代码:
[root@montos-prod ~]# curl -i http://127.0.0.1:6666/monkeys
HTTP/1.1 200 OK
Date: Thu, 01 Apr 2021 14:20:26 GMT
Content-Length: 25
Content-Type: text/plain; charset=utf-8
Hi there, I love monkeys!
总结
上述简单的运行了一个
web
程序,让我们入门如何写一个Go
语言的web
应用,可以看出Go
的模块化真的方便很多,我们只需要引入一个net/http
包即可,然后再本地项目中进行一个调用。