前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GO-Web 服务器的创建

GO-Web 服务器的创建

作者头像
cwl_java
发布2020-04-08 15:22:43
1.1K0
发布2020-04-08 15:22:43
举报
文章被收录于专栏:cwl_Javacwl_Javacwl_Java

第 2 章:Web 服务器的创建

2.1 简介

Go 提供了一系列用于创建 Web 服务器的标准库,而且通过 Go 创建一个服务器的步骤非常简单,只要通过 net/http 包调用ListenAndServe 函数并传入网络地址以及负责处理请求的处理器( handler )作为参数就可以了。如果网络地址参数为空字符串,那么服务器默认使用 80 端口进行网络连接;如果处理器参数为 nil,那么服务器将使用默认的多路复用器 DefaultServeMux,当然,我们也可以通过调用 NewServeMux 函数创建一个多路复用器。多路复用器接收到用户的请求之后根据请求的 URL 来判断使用哪个处理器来处理请求,找到后就会重定向到对应的处理器来处理请求,

2.2 使用默认的多路复用器(DefaultServeMux)

1)使用处理器函数处理请求

package main
import (
	"fmt"
	"net/http"
)
//创建处理器函数
func handler(w http.ResponseWriter, r * http.Request) {
	fmt.Fprintln(w, "正在通过处理器函数处理你的请求")
}
func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}

a) HandleFunc 方法的说明

在这里插入图片描述
在这里插入图片描述

b) 处理器函数的实现原理:

  • Go 语言拥有一种 HandlerFunc 函数类型,它可以将一个带有正确签名的函数 f 转换成一个带有方法 f 的 Handler。
在这里插入图片描述
在这里插入图片描述

2) 使用处理器处理请求

package main
import (
	"fmt"
	"net/http"
)
type MyHandler struct {}
func(h * MyHandler) ServeHTTP(w http.ResponseWriter, r *
	http.Request) {
	fmt.Fprintln(w, "正在通过处理器处理你的请求")
}
func main() {
	myHandler: = MyHandler {}
	//调用处理器
	http.Handle("/", & myHandler)
	http.ListenAndServe(":8080", nil)
}

i. Handle 方法的说明

在这里插入图片描述
在这里插入图片描述

ii. 关于处理器 Handler 的说明

在这里插入图片描述
在这里插入图片描述

也就是说只要某个结构体实现了 Handler 接口中的 ServeHTTP 方法那么它就是一个处理器

iii. 我们还可以通过 Server 结构对服务器进行更详细的配置

在这里插入图片描述
在这里插入图片描述
package main
import (
	"fmt"
	"net/http"
	"time"
)
type MyHandler struct {}
func(h * MyHandler) ServeHTTP(w http.ResponseWriter, r *
		http.Request) {
		fmt.Fprintln(w, "测试通过 Server 结构详细配置服务
			器 ")
		}
		func main() {
			myHandler: = MyHandler {}
			//通过 Server 结构对服务器进行更详细的配置
			server: = http.Server {
				Addr: ":8080",
				Handler: & myHandler,
				ReadTimeout: 2 * time.Second,
			}
			server.ListenAndServe()
		}

2.3 使用自己创建的多路复用器

  1. 在创建服务器时,我们还可以通过 NewServeMux 方法创建一个多路复用器
在这里插入图片描述
在这里插入图片描述
package main
import (
	"fmt"
	"net/http"
)
func handler(w http.ResponseWriter, r * http.Request) {
	fmt.Fprintln(w, "通过自己创建的多路复用器来处理请求")
}
func main() {
	mux: = http.NewServeMux() 
    mux.HandleFunc("/myMux", handler)
	http.ListenAndServe(":8080", mux)
}

结构体 ServeMux

在这里插入图片描述
在这里插入图片描述

结构体 ServeMux 的相关方法

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第 2 章:Web 服务器的创建
    • 2.1 简介
      • 2.2 使用默认的多路复用器(DefaultServeMux)
        • 2.3 使用自己创建的多路复用器
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档