GoWeb服务器搭建
GoWeb服务器的创建
1、Web工作原理

2、GoWeb服务器的创建
Go提供了一系列用于创建Web服务器的标准库,而且通过Go创建一个服务器的步骤非常简单,只要通过net/http包调用ListenAndServer函数并传入网络地址以及负责处理请求的处理器(handler)作为参数就可以,如果网络地址参数为空字符串,那么服务器默认使用80端口来进行网络连接,如果处理器的参数为nil,那么服务器将使用默认的多路复用器DefaultServeMux。当然我们也可以通过调用NewServeMux函数创建一个多路复用器,多路复用器接收到用户的额请求之后根据请求的url来判断使用哪个处理器来处理请求,找到后就会重定向到对应的处理器来处理请求。
使用默认的多路复用器(DefaultServeMux)
package main import (
"fmt"
"net/http"
) // 创建处理器函数
func handler(w http.ResponseWriter, r *http.Request){
fmt.Fprintln(w,"hello world", r.URL.Path)
} func main() {
http.HandleFunc("/",handler)
// 创建路由
http.ListenAndServe(":8080",nil)
}
HandleFunc方法说明
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
DefaultServeMux.HandleFunc(pattern, handler)
}
HandleFunc注册了一个处理函数handle和对应的模式pattern(注册到DefaultServeMux)。
Go语言拥有一种HandleFunc函数类型,它可以将一个带有正确签名的函数f转换成一个带有方法f的Handler。
使用自己创建的多路复用器
在创建服务器时,我们可以通过NewServeMux方法创建一个多路复用器
package main import (
"fmt"
"net/http"
) // 创建处理器函数
func handler(w http.ResponseWriter, r *http.Request){
fmt.Fprintln(w,"hello world", r.URL.Path)
} func main() {
// 创建多路复用器
mux := http.NewServeMux()
mux.HandleFunc("/",handler)
// 创建路由
http.ListenAndServe(":8080",mux)
}
使用处理器处理请求
某个结构体实现Handler结构的ServeHTTP方法,那么就实现了一个处理器。
package main import (
"fmt"
"net/http"
) type myHandler struct{} func (m *myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
fmt.Fprintln(w,"hello world")
} func main() {
m := myHandler{}
http.Handle("/",&m)
http.ListenAndServe(":8080",nil)
}
我们还可以通过Server结构体对服务器进行更详细的配置。
type Server struct {
Addr string // 监听的TCP地址,如果为空字符串会使用":http"
Handler Handler // 调用的处理器,如为nil会调用http.DefaultServeMux
ReadTimeout time.Duration // 请求的读取操作在超时前的最大持续时间
WriteTimeout time.Duration // 回复的写入操作在超时前的最大持续时间
MaxHeaderBytes int // 请求的头域最大长度,如为0则用DefaultMaxHeaderBytes
TLSConfig *tls.Config // 可选的TLS配置,用于ListenAndServeTLS方法
// TLSNextProto(可选地)指定一个函数来在一个NPN型协议升级出现时接管TLS连接的所有权。
// 映射的键为商谈的协议名;映射的值为函数,该函数的Handler参数应处理HTTP请求,
// 并且初始化Handler.ServeHTTP的*Request参数的TLS和RemoteAddr字段(如果未设置)。
// 连接在函数返回时会自动关闭。
TLSNextProto map[string]func(*Server, *tls.Conn, Handler)
// ConnState字段指定一个可选的回调函数,该函数会在一个与客户端的连接改变状态时被调用。
// 参见ConnState类型和相关常数获取细节。
ConnState func(net.Conn, ConnState)
// ErrorLog指定一个可选的日志记录器,用于记录接收连接时的错误和处理器不正常的行为。
// 如果本字段为nil,日志会通过log包的标准日志记录器写入os.Stderr。
ErrorLog *log.Logger
// 内含隐藏或非导出字段
}
Server类型定义了HTTP服务端的参数,Server的零值是合法的配置。
package main import (
"fmt"
"net/http"
"time"
) type myHandler struct{} func (m *myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
fmt.Fprintln(w,"hello world")
} func main() {
m := myHandler{}
server := http.Server{
Addr: ":8080",
Handler: &m,
ReadHeaderTimeout: 2*time.Second,
} server.ListenAndServe()
}
GoWeb服务器搭建的更多相关文章
- Git本地服务器搭建及使用详解
Git本地服务器搭建及使用 Git是一款免费.开源的分布式版本控制系统.众所周知的Github便是基于Git的开源代码库以及版本控制系统,由于其远程托管服务仅对开源免费,所以搭建本地Git服务器也是个 ...
- Linux下的SVN服务器搭建
Linux下的SVN服务器搭建 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总 ...
- 版本控制-svn服务器搭建和常用命令(centos 6.3)
Svn是比较优秀的版本控制工具,虽然功能和性能上无法和Git媲美,但由于其容易搭建和使用的特性,所以在各个小公司还是很受欢迎的.使用Git可参考<版本控制-Git服务器搭建和常用命令使用> ...
- 版本控制-Git服务器搭建和常用命令使用
Git是目前世界上最先进的分布式版本控制系统(没有之一).使用Svn的请参考<版本控制-svn服务器搭建和常用命令(centos 6.3)>,下面介绍Git的常用命令 常用命令 简单版 升 ...
- JAVA服务器搭建之问题总结
负责维护公司产品的web服务器搭建与维护,最近遇到一下状况,今天在这里简单总结一下,希望对于刚刚一些刚入行的小伙伴有所帮助,避免再走弯路. 第一点:Tomcat内存设置: 一.常见的Java内存溢出有 ...
- 烂泥:Postfix邮件服务器搭建之虚拟用户配置
virtual_gid_maps = static: virtual_transport = dovecot dovecot_destination_recipient_limit = 1 注意:po ...
- Centos vsftpd服务器搭建
Centos vsftpd服务器搭建 时间:2016-07-18 1.最为简单的vsftpd服务器搭建 1.安装vsftpd 1.yum 安装 yum install vsftpd 2.rpm文件安装 ...
- Linux下的SVN服务器搭建
鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ...
- SVN服务器搭建和使用(三)
SVN服务器搭建和使用(三) 接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等. 添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文 ...
- SVN服务器搭建和使用(二)
SVN服务器搭建和使用(二) 上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及Tortois ...
随机推荐
- 国产数据库高光时刻!天翼云TeleDB荣登TPC-DS全球测评总榜第二
近日,天翼云TeleDB数据库以40206063QphDS的吞吐量在国际权威机构TPC(国际事务处理性能委员会)发布的数据库基准测试TPC-DS中荣登全球榜单第二位.中国数据库技术跻身国际顶尖行列,这 ...
- NumPy学习8
今天学习了NumPy统计函数 16,NumPy统计函数 numpy_test8.py : import numpy as np ''' 16,NumPy统计函数 NumPy 提供了许多统计功能的函数, ...
- 【离线地图】地图瓦片css复杂滤镜线段绘制
需求: 目前已经对地图瓦片做了复杂滤镜的黑夜展示,现在又要在这个图片上绘制新的线段等内容,且不能被这个复杂滤镜影响,变成奇奇怪怪的颜色. 同时因为框架限制,只能在这个img上绘制 思考: 1.既然不想 ...
- SCRAPY入门学习(待完善)
Scrapy介绍 Scrapy 是用 Python 实现的一个为了爬取网站数据.提取结构性数据而编写的应用框架. Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 通常我们 ...
- 裸金属架构之服务器安装VMWare ESXI虚拟化平台详细流程
目录1. 裸金属架构(Vcent)2. Vcent安装流程2.1 远程控制端(个人电脑)安装VMware-viclien2.2 服务器部署安装VMWare ESXI2.3 VMware-viclien ...
- 从Docker Machine到K8S:容器管理为啥有这么多工具?
2018-11-09 18:01 关注嘉为科技,获取运维新知 目录 1.有了Docker,为啥还需要额外容器管理工具 2.Docker三剑客 Docker Machine Docker Compo ...
- DVWA靶场实战(八)——SQL Injection(Blind)
DVWA靶场实战(八) 八.SQL Injection(Blind): 1.漏洞原理: SQL Injection(Blind)全称为SQL注入之盲注,其实与正常的SQL大同小异,区别在于一般的注入攻 ...
- 构建窗体--java进阶day03
1.窗体对象Jframe 要创建窗体就需要Jframe对象,窗体创建好不会自己显示,还需要我们自己写一段代码让其显示 2.设置窗体可见--setVisible(true) 该方法用于显示窗体 3.窗体 ...
- 【Java】UDP套接字编程
服务器 udpserver.java package server; import java.net.DatagramPacket; import java.net.DatagramSocket; i ...
- Fast Prefix Sum Implementation Using Subgroups in GLSL Compute Shaders
利用 Vulkan 1.1 的 subgroup 特性加速 ComputeShader 的前缀和计算,参考: Vulkan Subgroup Tutorial - Khronos Blog - The ...