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服务器搭建的更多相关文章

  1. Git本地服务器搭建及使用详解

    Git本地服务器搭建及使用 Git是一款免费.开源的分布式版本控制系统.众所周知的Github便是基于Git的开源代码库以及版本控制系统,由于其远程托管服务仅对开源免费,所以搭建本地Git服务器也是个 ...

  2. ​Linux下的SVN服务器搭建

    ​Linux下的SVN服务器搭建 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总 ...

  3. 版本控制-svn服务器搭建和常用命令(centos 6.3)

    Svn是比较优秀的版本控制工具,虽然功能和性能上无法和Git媲美,但由于其容易搭建和使用的特性,所以在各个小公司还是很受欢迎的.使用Git可参考<版本控制-Git服务器搭建和常用命令使用> ...

  4. 版本控制-Git服务器搭建和常用命令使用

    Git是目前世界上最先进的分布式版本控制系统(没有之一).使用Svn的请参考<版本控制-svn服务器搭建和常用命令(centos 6.3)>,下面介绍Git的常用命令 常用命令 简单版 升 ...

  5. JAVA服务器搭建之问题总结

    负责维护公司产品的web服务器搭建与维护,最近遇到一下状况,今天在这里简单总结一下,希望对于刚刚一些刚入行的小伙伴有所帮助,避免再走弯路. 第一点:Tomcat内存设置: 一.常见的Java内存溢出有 ...

  6. 烂泥:Postfix邮件服务器搭建之虚拟用户配置

    virtual_gid_maps = static: virtual_transport = dovecot dovecot_destination_recipient_limit = 1 注意:po ...

  7. Centos vsftpd服务器搭建

    Centos vsftpd服务器搭建 时间:2016-07-18 1.最为简单的vsftpd服务器搭建 1.安装vsftpd 1.yum 安装 yum install vsftpd 2.rpm文件安装 ...

  8. Linux下的SVN服务器搭建

    鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ...

  9. SVN服务器搭建和使用(三)

    SVN服务器搭建和使用(三) 接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等. 添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文 ...

  10. SVN服务器搭建和使用(二)

    SVN服务器搭建和使用(二) 上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及Tortois ...

随机推荐

  1. 2个月搞定计算机二级C语言——真题(8)解析

    1. 前言 本篇我们讲解2个月搞定计算机二级C语言--真题8 2. 程序填空题 2.1 题目要求 2.2 提供的代码 #include <stdio.h> #define N 3 #def ...

  2. datagrid源码

    /** * jQuery EasyUI 1.2.3 * * Licensed under the GPL terms * To use it on other terms please contact ...

  3. linux tmux 使用教程

    前言 Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具. 本文介绍如何使用 Tmux. 一.Tmux 是什么? 1.1 会话与进程 命令行的典型使用 ...

  4. Flask快速入门1

    因为新换了一个工作,项目使用了Flask框架技术,需要快速学习下,学过Django这个重量级的框架基础后,再去学习Flask框架相对还是容易的. 当然入门基础容易,要深入理解还是要慢慢花时间深耕练习使 ...

  5. 如何利用 PostgreSQL 的 JSONB API 作为扩展的轻量级 JSON 解析器

    前言 在基于 C 语言的 PostgreSQL 扩展开发中,您可能会遇到需要处理 JSON 等结构化数据的情况.通常,您可能会在扩展中引入第三方 JSON 解析库,例如 cJSON 或 libjans ...

  6. Python进阶知识:多进程/多线程/装饰器

    本文写作于2025.3.20,恰好作者正好在外面实习,于此同时在实际工作中遇到这些知识点,因此就进行一个简短汇总方便后续回顾,内容同步更新(显示问题可以直接看):https://www.big-yel ...

  7. ANSYS实体单元施加扭矩方法分析

    ANSYS 结构分析单元与应用-王新敏等(P199) 此处以等截面椭圆柱为例. 对实体单元施加扭矩,主要方法如下: 引入质量单元 MASS21 并新建顶面的中心节点,随后将顶面所有节点通过 cerig ...

  8. 【Linux】3.9 网络配置

    网络配置 1 Linux网络配置原理 虚拟机NAT网络配置原理 2 查看网络IP和网关 2.1 虚拟机网络编辑器 2.2 修改IP地址 2.3 查看网关 2.4 查看windows中的虚拟网卡的ip地 ...

  9. 话说Hangfire

    参考文档 www.hangfire.io github.com/HangfireIO/Hangfire .NET Core开源组件:后台任务利器之Hangfire

  10. 《机器人SLAM导航核心技术与实战》第1季:第2章_C++编程范式

    <机器人SLAM导航核心技术与实战>第1季:第2章_C++编程范式 视频讲解 [第1季]2.第2章_C++编程范式-视频讲解 [第1季]2.1.第2章_C++编程范式-C++工程的组织结构 ...