欢迎,来自IP地址为:3.137.161.222 的朋友



Go语言由于其方便的并发通信机制以及强大的网络支持,常常被用于服务器软件的开发。本文将示例使用Go语言来开发简单的Web服务器。

HTTP协议是应用层协议,协议模型位于TCP之上,其主要定义了web服务器同客户端浏览器交互的标准。Go对于处HTTP协议具有专用包”net/http”,用于专门接收HTTP请求及几浏览器返回响应。

当我们引入”http”包后,可以使用http.ListenAndServe()函数启动web服务,就像在TCP服务器中使用net.Listen()函数来开始侦听一样。这个函数会有一个返回值用于指示服务是否启动成功,如果启动成功,则返回值为nil,否则返回错误信息。

web服务器的地址通过专用类型http.URL来表示,这个类型中包含字符串类型的Path字段用于保存url信息;而用户请求会被封装在http.Request类型中,这个类型中则包含了一个URL字段。

如果请求变量”req”是一个HTML表单的POST请求,而”var1″是表单中的某一个输入字段,那么用户在表单中输入的内容可以通过如下的Go代码来获得:

req.FormValue("var1")

另外一种方法是调用request.ParseForm()函数,然后使用如下代码来获取对应值:

var1, found := request.Form["var1"]

这里会有两个返回值,第一个var1是对应的数值,而第二个found是一个bool类型的值,用于指示是否可以找到对应于”var1″的值。可以看出来,Form字段事实上是一个map[string][]string类型。

web服务器生成一个http.Response响应,这个响应会发送到一个http.ResponseWriter对象,这个对象处理HTTP服务器的响应,通过向该对象写数据,请会把响应数据返回给浏览器。

之后,我们还需要编写代码还让web服务器可以工作,也就是可以处理用户请求。Go语言通过http.HandleFunc()函数来完成此项工作。这个函数有两个参数,第一个是用户请求的地址,第二个是对应请求地址的处理函数名。其中请求地址是相对地址,例如web的根地址为”/”,如果使用本面开启服务器,则对应的url就是”http://localhost”等。处理函数一般包含对于用户请求的响应,可以通过fmt.Fprintf()函数或者 io.Writestring()函数来实现。

现在创建一个simplewebserver.go文件,用于编写简单web服务器代码,完整代码如下所示:

package main

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

func HelloServer(w http.ResponseWriter, req *http.Request){
	fmt.Println("Inside HelloServer handler")
	fmt.Fprint(w,"Hello: "+ req.URL.Path[1:])
}

func main() {
	http.HandleFunc("/",HelloServer)
	err := http.ListenAndServe("localhost:8080",nil)
	if err != nil{
		log.Fatal("ListenAndServe: ",err.Error())
	}
}

最后,可以通过浏览器访问”http://localhost:8080/daehub”和”http://localhost:8080/daehub”,可以看到,服务器对于不同url的请求,会给出不同的响应内容:

至此,一个可响应不同url请求的Go语言简单web服务器就完成了,可以明显感觉到用Go语言实开发web服务器是多么简单和方便,代码又简洁而优雅。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注