go语言http包简易入门(代码片段)

summer7c summer7c     2022-12-16     115

关键词:

说道go语言web编程,必不可少的会使用到net/http包。go语言将web开发需要使用到的很多内容都放在了标准库中——net/http。

如何写一个简单的web程序很容易。如下:

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "net/http"
 6 )
 7 
 8 func hello(w http.ResponseWriter, r *http.Request) 
 9     fmt.Fprintf(w, "hello")
10 
11 
12 func main() 
13     server := &http.Server
14         Addr: "0.0.0.0:8080",
15     
16     http.HandleFunc("/hello", hello)
17     server.ListenAndServe()
18 

其中使用了http包。使用http.HandleFunc就是使用了一个处理器函数。
处理器函数是一个签名和ServeHTTP方法相同的函数,Go语言中,有一种HandlerFunc函数类型,可以加将这个函数转化为带有方法的处理器(Handler)?

ServerMux是一个路由管理器,也可以说是一个多路复用器,使用方式如下:

 1 package main
 2 import (
 3     "fmt"
 4     "net/http"
 5 )
 6 func main() 
 7     servermux := http.NewServeMux()
 8     servermux.HandleFunc("/hello", hello)
 9     server := &http.Server
10         Addr: ":8080",
11         Handler: servermux,
12     
13     server.ListenAndServe()
14 
15 func hello(w http.ResponseWriter, r *http.Request) 
16     fmt.Fprintln(w, "hello world")
17 

其实是在使用http.HandleFunc的时候,调用了

1 func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) 
2     DefaultServeMux.HandleFunc(pattern, handler)
3 

这样的话,其实是使用了一个变量DefaultServeMux,再看看这个变量的内容:

1 var DefaultServeMux = &defaultServeMux
2 var defaultServeMux ServeMux

这个变量其实就是ServeMux的实例。也就是ServeMux,所以在使用http的handerfunc的时候,是使用了这个多路复用器的。这个处理器也是默认的处理器。如果没有声明或者直接使用其他的处理器的时候,调用处理器函数和处理器都是使用了这个。

 

接下来看HandleFunc这个函数,以上使用的http包的函数HandleFunc最终调用的是ServeMux的HandleFunc。所以在使用的时候Handle和HandleFunc完全一致。

type HandlerFunc func(ResponseWriter, *Request)

HandleFunc最终会将函数转成HandleFunc,等同于Handler,Handler是一个接口,如下:

1 type Handler interface 
2     ServeHTTP(ResponseWriter, *Request)
3 

所以其实这两种类型是等价的。

go语言入门(代码片段)

go语言入门目录go语言入门go语言环境安装linuxwindowsgo命令查看可用命令build和run命令fmt和doc命令get命令install命令test命令go语言环境安装linuxaptinstallgolangyuminstallgolang-ywindows下载地址添加环境变量,#使用一下命令测试安装是否成功gove... 查看详情

go语言入门(代码片段)

go语言入门目录go语言入门go语言环境安装linuxwindowsgo命令查看可用命令build和run命令fmt和doc命令get命令install命令test命令go语言环境安装linuxaptinstallgolangyuminstallgolang-ywindows下载地址添加环境变量,#使用一下命令测试安装是否成功gove... 查看详情

go语言入门(代码片段)

GO语言耳闻已久的Go语言,今天入门了解一下。Go之所以火爆的原因之一是,拥有CoreOS,Kubernetes(Google),InfluxDB知名大客户,另外Docker也是Go语言所编写。Go语言的功能特性(所有这些特性,以后慢慢学习了解)并发支持简单性... 查看详情

go语言基础入门(代码片段)

...与使用多模块工作区总结前言Go是由谷歌支持的开源编程语言,属于编译型语言,对并发编程有较好的支持。官网页面:https://go.dev/或者https://golang.google.cn/主要适合 查看详情

go入门教程变量(代码片段)

变量定义要求:Go语言变量名由字母、数字、下划线组成,其中首个字符不能为数字在描述变量定义之前,先描述下go语言的结构packagemainimport"fmt"import"math"funcmain()//定义单一变量varage=28fmt.Println("myageis",age)输出:myageis28Go语言的基... 查看详情

go入门-包,函数和变量(代码片段)

主要内容来自中文版的同名教程Go语言之旅其目的为总结要点包,函数和变量包import语法,多个用括号换行扩起,包之间不需要间隔符,用引号引起import("fmt""math/rand")//官方认为分组导入比多个导入更好//用`.`引用包内对象,仅有... 查看详情

七天入门go语言文件&&包|第五天渐入佳境(代码片段)

...zip文件2.包管理2.1包路径2.2包声明最后本章节主要介绍go语言的文件处理与包管理1.文件处理1.1JSON文件什么是json?JSON(JavaScriptObjectNota 查看详情

go语言入门指南零基础入门go语言|golang入门指南(代码片段)

文章目录写在前面全部练习项目都在github这个仓库中`https://github.com/CocaineCong/Golang-Learning`1.【第一轮】基础部分1.1教程1.2练习2.【第二轮】网络爬虫2.1教程2.2mod管理第三方包2.3git机制3.【第三轮】备忘录4.【第四轮】商城or视... 查看详情

go语言入门指南零基础入门go语言|golang入门指南(代码片段)

文章目录写在前面全部练习项目都在github这个仓库中`https://github.com/CocaineCong/Golang-Learning`1.【第一轮】基础部分1.1教程1.2练习2.【第二轮】网络爬虫2.1教程2.2mod管理第三方包2.3git机制3.【第三轮】备忘录4.【第四轮】商城or视... 查看详情

hyperlegerfabric开发——hyperlegerfabric入门(代码片段)

...7.3workstation版本操作系统。一、HyperLegerFabric环境部署1、Go语言开发环境部署(1)Go语言环境安装Go语言环境安装包下载地址:https://golang.org/dl/https://golang.google.cn/dl/将下载的源码包解压至/usr/local目 查看详情

go语言从入门到放弃(代码片段)

...packagemain 定义了该程序的包名为main,main的功能同其它语言一样,都代表着程序的主 查看详情

go快速入门(代码片段)

入门Go语言需要多久?答案是——读完这篇文章的时间!不妨找一个周末的下午,踏上Go之旅吧!更新记录:2016.12.12:完成重制2016.11.02:增加重点理解和参考链接2016.08.11:完成初稿任务目标了解Go的设计哲学和与其他面向对象语言在... 查看详情

go语言标准库之http/template(代码片段)

Go语言标准库之http/templatehtml/template包实现了数据驱动的模板,用于生成可防止代码注入的安全的HTML内容。它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用html/template这个包。模板与渲染在一些前后端不分离... 查看详情

go语言入门三部曲:能看懂go语言(代码片段)

文章目录三部曲搭建环境代码简要讲解包导入导出名标识符关键字和预定义标识符基本类型变量与常量变量声明短变量声明类型转换常量流程控制for循环if分支switch分支defer高级结构指针结构体数组切片切片的底层切片的默认行... 查看详情

七天入门go语言网络编程|第六天炉火纯青(代码片段)

...编程2.1HTTP客户端2.2HTTP服务端2.2.1处理HTTP请求3.RPC编程3.1Go语言中的RPC支持与处理3.2Gob简介3.3设计优雅的RPC接口最后1.Socket编程在Go语言中编写网络程序时,我们将看不到传统的编码形式。以前我们使用Socket编程时,会按照... 查看详情

go语言入门13(runtime包)(代码片段)

Runtime包GOMAXPROCS()​ 用来设置可以并行计算的CPU核数最大值,并返回之前的值,具体使用方法上一篇有些,这里不再赘述Gosched()​ 用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个... 查看详情

用go语言撸一个简易版的区块链(代码片段)

用go撸一个简易版的区块链引言这个最初的版本时多年以前学习go的时候,自己撸的一个简易版本的区块链。不过麻雀虽小,五脏俱全。通过这个代码你了解区块链内部的大概运行机制时没有问题的。比特币底层区块链的... 查看详情

用go语言撸一个简易版的区块链(代码片段)

用go撸一个简易版的区块链引言这个最初的版本时多年以前学习go的时候,自己撸的一个简易版本的区块链。不过麻雀虽小,五脏俱全。通过这个代码你了解区块链内部的大概运行机制时没有问题的。比特币底层区块链的... 查看详情