Go 语言网络编程:简单的网页服务器 1 个改进

GO如何实现一个web服务器?

Go 语言里面提供了一个完善的net/http包,主要用于提供 Web服务,响应并处理客户端(浏览器)的 HTTP 请求。同时使用这个包能很简单地对 Web 路由,静态文件,模版,cookie等数据进行设置和操作。

实现代码

下面我们使用 Go 语言标准库中的 net/http 包搭建一个简单的 Web 服务器。同时使用 io 包来输出字符串:

package main

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

func main() {
    http.HandleFunc("/hello", helloHandler)
    err := http.ListenAndServe(":8000", nil)
    if err != nil {
        log.Fatal("ListenAndServe:", err.Error())
    }
}

func helloHandler(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "hello, world!")
}

可以看到,我们在main()方法中调用了http.HandleFunc(),该方法用于分发请求,即针对某一路径请求将其映射到指定的业务逻辑处理方法中。如果你有其他编程语言(比如 Ruby、 Python 或者 PHP 等)的 Web 开发经验,可以将其形象地理解为提供类似 URL 路由或者 URL 映射之类的功能。在hello.go中,http.HandleFunc()方法接受两个参数,第一个参数是 HTTP 请求的 目标路径 "/hello",该参数值可以是字符串,也可以是字符串形式的正则表达式,第二个参数指定 具体的回调方法,比如 helloHandler。当我们的程序运行起来后,访问http://localhost:8080/hello , 程序就会去调用 helloHandler() 方法中的业务逻辑程序。

在上述例子中,helloHandler() 方法是 http.HandlerFunc 类型的实例,并传入http.Requesthttp.ResponseWriter作为其必要的两个参数。http.ResponseWriter 类型的对象用于包装处理HTTP服务端的响应信息。我们将字符串 「Hello, world! 」写入类型为 http.ResponseWriter的w实例中,即可将该字符串数据发送到HTTP客户端。第二个参数 r *http.Request表示的是此次HTTP请求的一个数据结构体,即代表一个客户端,不过该示例中我们尚未用到它。

我们还看到,在main()方法中调用了http.ListenAndServe(),该方法用于在示例中监听8080端口,接受并调用内部程序来处理连接到此端口的请求。如果端口监听失败,会调用 log.Fatal()方法输出异常出错信息。
然后我们编译并运行hello.go源文件并使用 CURL 来测试我们的网站:

$ go run hello.go
$ curl http://localhost:8080/hello
hello, world!

至此,我们用 Go 实现了一个简单的 Web 服务器。

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!