使用Go开发web服务器
Go(Golang.org)是在标准库中提供HTTP协议支持的系统语言,通过他可以快速简单的开发一个web服务器。同时,Go语言为开发者提供了很多便利。这本篇博客中我们将列出使用Go开发HTTP 服务器的方式,然后分析下这些不同的方法是如何工作,为什么工作的。
在开始之前,假设你已经知道Go的一些基本语法,明白HTTP的原理,知道什么是web服务器。然后我们就可以开始HTTP 服务器版本的著名的“Hello world”。
首先看到结果,然后再解释细节这种方法更好一点。创建一个叫http1.go的文件。然后将下面的代码复制过去:
package main import (
"io"
"net/http"
) func hello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "Hello world!")
} func main() {
http.HandleFunc("/", hello)
http.ListenAndServe(":8000", nil)
}
在终端执行go run http1.go,然后再浏览器访问http://localhost:8000。你将会看到Hello world!显示在屏幕上。
为什么会这样?在Go语言里所有的可运行的包都必须命名为main。我们创建了main和hello两个函数。
在main函数中,我们从net/http包中调用了一个http.HandleFucn函数来注册一个处理函数,在本例中是hello函数。这个函数接受两个参数。第一个是一个字符串,这个将进行路由匹配,在本例中是根路由。第二个函数是一个func (ResponseWriter, Request)的签名。正如你所见,我们的hello函数就是这样的签名。下一行中的http.ListenAndServe(":8000", nil),表示监听localhost的8000端口,暂时忽略掉nil。
在hello函数中我们有两个参数,一个是http.ResponseWriter类型的。它类似响应流,实际上是一个接口类型。第二个是http.Request类型,类似于HTTP 请求。我们不必使用所有的参数,就想再hello函数中一样。如果我们想返回“hello world”,那么我们只需要是用http.ResponseWriter,io.WriteString,是一个帮助函数,将会想输出流写入数据。
下面是一个稍微复杂的例子:
package main import (
"io"
"net/http"
) func hello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "Hello world!")
} func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", hello)
http.ListenAndServe(":8000", mux)
}
在上面这个例子中,我们不在在函数http.ListenAndServe使用nil了。它被*ServeMux替代了。你可能会猜这个例子跟我上面的例子是样的。使用http注册hanlder 函数模式就是用的ServeMux。
下面是一个更复杂的例子:
import (
"io"
"net/http"
) func hello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "Hello world!")
} var mux map[string]func(http.ResponseWriter, *http.Request) func main() {
server := http.Server{
Addr: ":8000",
Handler: &myHandler{},
} mux = make(map[string]func(http.ResponseWriter, *http.Request))
mux["/"] = hello server.ListenAndServe()
} type myHandler struct{} func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if h, ok := mux[r.URL.String()]; ok {
h(w, r)
return
} io.WriteString(w, "My server: "+r.URL.String())
}
为了验证你的猜想,我们有做了相同的事情,就是再次在屏幕上输出Hello world。然而现在我们没有定义ServeMux,而是使用了http.Server。这样你就能知道为什么可以i是用net/http包运行了服务器了。
使用Go开发web服务器的更多相关文章
- vs2015 无法连接到已配置的开发web服务器
问题一:vs2015 无法连接到已配置的开发web服务器 最靠谱方法如下:(和防火墙开启无关联, 注册表增加什么键值无关联 , 缺失asp.net core.Dll文件无关联 ) 分析,因为前提是你的 ...
- VS提示无法连接到已配置的开发web服务器的解决方法
VS2013每次启动项目调试好好的,今天出现了提示“提示无法连接到已配置的开发web服务器“,使用环境是本地IISExpress,操作系统为windows10,之前也出现过就是重启电脑又好了,这次是刚 ...
- DELPHI XE5开发WEB服务器及安卓手机客户端
Xe5开发web服务端和手机客户端 ------------------------------------- Delphi xe5作为最新开发利器,就类似如当年的DELPHI,功能强大,快发速度快, ...
- 使用Gulp构建本地开发Web服务器
前端模拟ajax,就需要配置web服务器(apache,iis,nginx),有点麻烦 代码有一点点修改,就需要F5刷新页面很麻烦 Gulp + Gulp-connect + watch + live ...
- 无法连接到已配置的开发web服务器
http://jingyan.baidu.com/article/29697b91099847ab20de3c8b.html 这是防火墙造成的,将防火墙关闭即可
- vs2012无法启动已配置的开发Web服务器
] 有些教程说要开,我就没懂了
- python开发web服务器——搭建简易网站
参看:https://blog.csdn.net/baidu_35085676/article/details/69807145
- Node.js学习笔记——Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- JavaWeb基础: Web应用和Web服务器
Web Server工作原理 假设工程师想提供一个网页浏览的Web应用给客户,需要经过以下几步: 在指定目录下新建资源(hello.html) 编写一个服务器ServerDemo监听请求和响应请求:S ...
随机推荐
- [深入浅出Windows 10]实现饼图控件
13.2 实现饼图控件 上一小节讲解了动态生成折线图和区域图,对于简单的图形这样通过C#代码来生成的方式是很方便的,但是当我们的图表要实现更加复杂的逻辑的时候,这种动态生成的方式就显得力不从心了,那就 ...
- vsfptd
如果想通过vsftpd来在主机和虚拟机之间拿数据,可以通过这种方法: 在主机的资源管理器中输入:ftp://虚拟机里面Linux的IP(如192.168.2.112)/ 如果反过来,需要如下:ftp: ...
- Resharp最新破解方法
ReSharper是一个JetBrains公司出品的著名的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.它包括一系列丰富的能大大增加C#和Visual Ba ...
- 多种方式实现在Android 手机上抓包
一.素材来源 https://www.zhihu.com/question/20467503 二.方法整理 2.1 方式1:Packet Capture + HTTP Injector 使用于在手机端 ...
- [LintCode] Length of Last Word 求末尾单词的长度
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...
- mysql体系结构
mysql逻辑架构: 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术.它们都是服务于C/S程序或者是这些程序所需要的:连接处理,身份验证,安全性等等. 第二层值得关注.这是MySQL的核 ...
- nodeType的返回
<p id="one" title="one_one">one_one_one</p> 1.用getElementById var o ...
- chrome 优秀的插件推荐
就本人使用过的chrome插件推荐下: 1:Adblock Plus 免费的广告拦截器,可阻止所有烦人的广告及恶意软件和跟踪. 2:ChaZD 英文翻译,妈妈再也不用担心我英文看不懂了,ChaZD 查 ...
- 20145337实验三实验报告——敏捷开发与XP实践
20145337实验三实验报告--敏捷开发与XP实践 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 ** 实验步骤**### 敏捷开发与XP 软件工程包括下列领域:软件需求 ...
- BizTalk开发系列(三十一)配置和使用HTTP适配器
BizTalk的主机分别进程内主机和独立主机.但由于一直使用的是进程内主机,对于独立主机的认识比较模糊,前不久在做一个BizTalk的项目的时 候,个别系统使用HTTP的方式发布Txt之类的文本的.刚 ...