GoLang之搭建Web服务器

前端之家收集整理的这篇文章主要介绍了GoLang之搭建Web服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

2014-02-05 wcdj@H_502_1@


@H_502_1@

0 摘要

之前总结过如何使用Perl搭建Web服务《Web服务器的实现(最小的Perl Web服务器)》。本文介绍如何使用GoLang搭建Web服务,Go语言提供了一个完善的net/http包,通过这个http包可以很方便搭建一个可以运行的Web服务,同时使用这个包能很简单地对Web的路由,静态文件,模板,Cookie等数据进行设置和操作。@H_502_1@


@H_502_1@

1 测试代码

http_svr.go@H_502_1@

package main

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

func sayhelloName(w http.ResponseWriter,r *http.Request) {

	// 解析参数,默认是不会解析的
	r.ParseForm()

	// 这些信息是输出到服务器端的打印信息
	fmt.Println("request map:",r.Form)
	fmt.Println("path",r.URL.Path)
	fmt.Println("scheme",r.URL.Scheme)
	fmt.Println(r.Form["url_long"])

	for k,v := range r.Form {
		fmt.Println("key:",k)
		fmt.Println("val:",strings.Join(v,";"))
	}

	// 这个写入到w的信息是输出到客户端的
	fmt.Fprintf(w,"Hello gerryyang!\n")
}

func main() {

	// 设置访问的路由
	http.HandleFunc("/",sayhelloName)

	// 设置监听的端口
	err := http.ListenAndServe(":9090",nil)
	if err != nil {
		log.Fatal("ListenAndServe: ",err)
	}
}

2 测试用例一

(1) 在浏览器输入:http://localhost:9090/,则:@H_502_1@

浏览器输出:@H_502_1@

Hello gerryyang!
@H_502_1@

http_svr输出:@H_502_1@

request map: map[]
path /
scheme
[]@H_502_1@


@H_502_1@

(2) 在终端使用curl命令测试。
@H_502_1@

curl "http://localhost:9090/?url_long=111&url_long=222&name=gerryyang&gender=male"@H_502_1@

终端输出:@H_502_1@

Hello gerryyang!
@H_502_1@

http_svr输出:@H_502_1@

request map: map[url_long:[111 222] name:[gerryyang] gender:[male]]
path /
scheme
[111 222]
key: url_long
val: 111;222
key: name
val: gerryyang
key: gender
val: male@H_502_1@


@H_502_1@

3 测试代码

package main

import (
	"fmt"
	"net/http"
)

type MyMux struct {
}

func (p *MyMux) ServeHTTP(w http.ResponseWriter,r *http.Request) {
	if r.URL.Path == "/" {
		sayhelloName(w,r)
		return
	}
	http.NotFound(w,r)
	return
}

func sayhelloName(w http.ResponseWriter,r *http.Request) {
	fmt.Fprintf(w,"Hello gerryyang,version 2!\n")
}

func main() {
	mux := &MyMux{}
	http.ListenAndServe(":9090",mux)
}

4 测试用例二

gerryyang@mba:go_web$curl "http://localhost:9090/?url_long=111&url_long=222&name=gerryyang&gender=male"
Hello gerryyang,version 2!
gerryyang@mba:go_web$curl "http://localhost:9090/aa?url_long=111&url_long=222&name=gerryyang&gender=male"
404 page not found


5 小结

用例一,使用GoLang编写Web服务只要调用http包的两个函数,不依赖Nginx,apache服务器。@H_502_1@


@H_502_1@

6 原理分析

GoLang实现Web服务的流程如下:@H_502_1@

(1) 创建Listen Socket,监听指定的端口,等待客户端(大黄鸭)请求到来;@H_502_1@

(2) Listen Socket接受客户端的请求,得到Client Socket,接下来通过Client Socket与客户端通信;@H_502_1@

(3) 处理客户端的请求,首先从Client Socket读取HTTP请求的协议头,如果是POST方法,还可能要读取客户端提交的数据,然后交给相应地handler处理请求,handler处理完毕准备好客户端需要的数据,通过Client Socket写给客户端;@H_502_1@


@H_502_1@

7 参考

[1] Go Web编程 @H_502_1@ 原文链接:https://www.f2er.com/go/191114.html

猜你在找的Go相关文章