Go语言http包简易入门
说道go语言web编程,必不可少的会使用到net/http包。go语言将web开发需要使用到的很多内容都放在了标准库中——net/http。
如何写一个简单的web程序很容易。如下:
package main import (
"fmt"
"net/http"
) func hello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello")
} func main() {
server := &http.Server{
Addr: "0.0.0.0:8080",
}
http.HandleFunc("/hello", hello)
server.ListenAndServe()
}
其中使用了http包。使用http.HandleFunc就是使用了一个处理器函数。
处理器函数是一个签名和ServeHTTP方法相同的函数,Go语言中,有一种HandlerFunc函数类型,可以加将这个函数转化为带有方法的处理器(Handler)?
ServerMux是一个路由管理器,也可以说是一个多路复用器,使用方式如下:
package main
import (
"fmt"
"net/http"
)
func main() {
servermux := http.NewServeMux()
servermux.HandleFunc("/hello", hello)
server := &http.Server{
Addr: ":8080",
Handler: servermux,
}
server.ListenAndServe()
}
func hello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "hello world")
}
其实是在使用http.HandleFunc的时候,调用了
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
DefaultServeMux.HandleFunc(pattern, handler)
}
这样的话,其实是使用了一个变量DefaultServeMux,再看看这个变量的内容:
var DefaultServeMux = &defaultServeMux
var defaultServeMux ServeMux
这个变量其实就是ServeMux的实例。也就是ServeMux,所以在使用http的handerfunc的时候,是使用了这个多路复用器的。这个处理器也是默认的处理器。如果没有声明或者直接使用其他的处理器的时候,调用处理器函数和处理器都是使用了这个。
接下来看HandleFunc这个函数,以上使用的http包的函数HandleFunc最终调用的是ServeMux的HandleFunc。所以在使用的时候Handle和HandleFunc完全一致。
type HandlerFunc func(ResponseWriter, *Request)
HandleFunc最终会将函数转成HandleFunc,等同于Handler,Handler是一个接口,如下:
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
所以其实这两种类型是等价的。
Go语言http包简易入门的更多相关文章
- JNI简易入门
JNI简介 JNI(Java Native Interface)是JDK的一部分,提供了若干API实现了Java和其他语言的通信(主要是C/C++).JNI主要用于以下场景: 贴近硬件底层的功能,Ja ...
- R语言dplyr包初探
昨天学了一下R语言dplyr包,处理数据框还是很好用的.记录一下免得我忘记了... 先写一篇入门的,以后有空再写一篇详细的用法. #dplyr learning library(dplyr) #fil ...
- R语言 ggplot2包
R语言 ggplot2包的学习 分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将 ...
- go mod 解决 Go 语言的包依赖问题
转:https://testerhome.com/topics/16980 https://testerhome.com/ -------------------------------------- ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具]
[易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具] 项目实战 实战5:实现BTC价格转换工具 今天我们来开发一个简单的BTC实时价格转换工具. 我们首先 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏]
[易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏] 项目实战 实战1:猜数字游戏 我们今天来来开始简单的项目实战. 第一个简单项目是猜数字游戏. 简单来说,系统给了 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro]
[易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro] 实用知识 宏Macro 我们今天来讲讲Rust中强大的宏Macro. Rust的宏macro是实现元编程的强大工具. ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(19)|多线程]
[易学易懂系列|rustlang语言|零基础|快速入门|(19)|多线程] 实用知识 多线程 我们今天来讲讲Rust中的多线程. 我直接来看看代码: use std::thread; use std: ...
- R语言-神经网络包RSNNS
code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...
随机推荐
- HeadFirst设计模式---观察者
表达公式 注册者 + 订阅者 = 观察者模式 设计气象站 气象站接口 /** ** 布告板 ** @author lollipop ** @since 2019/11/24 **/ public in ...
- 10.InfluxDB-InfluxQL基础语法教程--OFFSET 和SOFFSET子句
本文翻译自官网,官网地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/) OFFSET 和SO ...
- 7、Topic
Topics In the previous tutorial we improved our logging system. Instead of using a fanout exchange o ...
- linux ptrace I【转】
转自:https://www.cnblogs.com/mmmmar/p/6040325.html 这几天通过<游戏安全——手游安全技术入门这本书>了解到linux系统中ptrace()这个 ...
- JS高阶---执行上下文
1.代码分类 2.全局执行上下文 3.函数执行上下文 .
- linux基础-ssh服务
SSH ssh 服务是实现管路服务器的一种方式: 本地管理(安装系统,故障修复),ssh 远程连接 linux 可以是实现远程连接的方式:ssh 命令 windows 可以实现远程连接方式: xshe ...
- Linux安装docker(ubuntu16.04和centos7.4)
ubuntu16.04版本 1.安装依赖 sudo apt-get install apt-transport-https ca-certificates software-properties-co ...
- python27期day03:字符串详解:整型、可变数据类型和不可变数据类型、进制转换、索引、切片、步长、字符串方法、进制转换、作业题。
1.%s: a = "我是新力,我喜欢:%s,我钟爱:%s"b = a%("开车","唱跳rap")print(b)2.整型: 整数在Pyt ...
- Exception in createBlockOutputStream
Exception in createBlockOutputStream 出现这个问题,可能是端口没打开,把异常往下拉,就可以看到哪个端口,在centos 打开端口
- Python DataFrame 按条件筛选数据
原始数据如下. 比如我想查看id等于11396的数据. pdata1[pdata1['id']==11396] 查看时间time小于25320的数据. pdata1[pdata1['time']< ...