Golang net-http包
创始人
2025-05-31 11:45:15
0

介绍

这个包的作用主要是用来发送http请求和接受http请求的。

  • 作为客户端:它去发送一个请求,拿到返回

  • 作为服务端:直接启动web服务,然后根据其他人的请求返回不同的结果

.
├── ClientGet
│ └── main.go // 发送get请求
├── ClientPost
│ └── main.go // 发送post请求
├── Server
│ └── main.go // web服务

Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。

服务器

Go 语言标准库 net/http 包提供了非常易用的接口,如下所示,我们可以利用标准库提供的功能快速搭建新的 HTTP 服务:

func handler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}func main() {http.HandleFunc("/", handler)log.Fatal(http.ListenAndServe(":8080", nil))
}

上述的 main 函数只调用了两个标准库提供的函数,它们分别是用于注册处理器的 net/http.HandleFunc 函数和用于监听和处理器请求的 net/http.ListenAndServe,多数的服务器框架都会包含这两类接口,分别负责注册处理器和处理外部请求,这一种非常常见的模式,我们在这里也会按照这两个维度介绍标准库如何支持 HTTP 服务器的实现。

func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) 这个函数的第一个参数是字符串,第二个参数是函数。

注册处理器

HTTP 服务是由一组实现了 net/http.Handler 接口的处理器组成的,处理 HTTP 请求时会根据请求的路由选择合适的处理器:

web服务

  • 客户端请求信息封装在 http.Request 对象中(在request对象当中,能够拿到其header,body,传参)

  • 服务端返回的响应报文会被保存在http.Response结构体中

  • 发送给客户端响应的并不是http.Response,而是通过http.ResponseWriter接口来实现的

方法签名 描述

现在要写服务端,那么需要将net/http包引入进来。

其实在各种的交互当中,接口和接口,接口和前端,前端和后端,全部都是使用json。son.NewEncoder(w).Encode(d)的好处是可以帮助你转化为json。

注意⚠️get参数都在其url里面。

HandleFunc其实也就定义了请求什么目录,那么请求了这个目录我会怎么去响应给你,具体响应交给具体的函数进行处理。

w http.ResponseWriter 借助w写入到response里面去,就是写回给调用方,调用方传递的request参数全部在r里面。

这里请求多个目录可以定义多个handler。

因为已经写好了路由,那么http.ListenAndServe(":8080", nil)里面传入的是nil。

package mainimport ("encoding/json""fmt""io/ioutil""net/http"
)type Data struct {Name string `json:"name"`
}// 这里接受两个参数是固定用法
// http.ResponseWriter是一个接口,不能使用指针类型。它有不同的实现,它作用是用来返回给客户端内容
// http.Request 指针类型,因为是结构体类型,从该对象当中拿到请求信息,其实也就是一个去拿请求信息,一个是用来返回的
func dealGetReqHandler(w http.ResponseWriter, r *http.Request) {query := r.URL.Query() //用于拿到?号之后的参数if len(query["name"]) > 0 {name := query["name"][0]fmt.Println("通过字典下标获取", name)}//发出get请求的参数namename2 := query.Get("name")fmt.Println("通过get方式获取:", name2)//上面是针对request的,下面是响应针对response的//返回响应吗w.WriteHeader(http.StatusOK)//返回方法1:返回响应内容,字符串类型//w.Write([]byte(name2))//返回的是结构体,其实也就是jsond := &Data{Name: name2,}json.NewEncoder(w).Encode(d)}func delPostReqHandler(w http.ResponseWriter, r *http.Request) {bodyContent, _ := ioutil.ReadAll(r.Body)strData := string(bodyContent)var d Datajson.Unmarshal([]byte(strData), &d)json.NewEncoder(w).Encode(d)}func main() {//注册路由,注册处理器http.HandleFunc("/req/get", dealGetReqHandler)http.HandleFunc("/req/post", delPostReqHandler)//后面nile是全局的handler,没必要,因为局部已经注册了http.ListenAndServe(":8000", nil)
}

这样就可以并发的去处理多个请求,对于每个请求,其实它会单独的去开辟go routine协程去处理它。

相关内容

热门资讯

捐款感谢信的范文参照 感谢村民... 捐款感谢信的范文一尊敬的xx实验中学的全体师生、员工:  您们好!您们的捐款我们如数收到,您们的爱心...
最新或2023(历届)火灾捐款...  火灾捐款感谢信范文一:同志:  正月初七早晨,新河镇西门街遭受火灾,一排木结构二层七间民房着火,居...
毕业送给给老师的感谢信 六年级... 尊敬的老师:  你好!感谢这三年来你对我的关怀与照顾,在你的帮助下,我也考得了好成绩,我之所以能考到...
最新或2023(历届)给老师的...   给老师的感谢信范文参考一敬爱的老师:  您好!最近在课堂上看到您容光满面,我也替您感到快乐与舒心...
家长写给老师的感谢信范文精选 ... 泾洋初级中学的老师、同学们:  我是贵校初三第十三班学生陈佳豪的家长。就在清明节放假期间,我的孩子在...
【vue2】vue2中的性能优... ⭐ v-for 遍历避免同时使用 v-if ⭐ v-for 中的key绑定唯一的值 ⭐ v-show...
freemarker转成PDF... Spring Boot 集成 FreeMarker 可以通过在 pom.xml 文件中添加依赖项来实...
写给亲爱的妈妈的一封感谢信 给... 写给亲爱的妈妈的一封感谢信亲爱的妈妈:  您好!  恩情,从小处讲可以是炎夏中给你一碗清爽冰凉的柠檬...
受到爱心捐款的感谢信范文 受灾... 受到爱心捐款感谢信一尊敬的老师,亲爱的同学: 你们好!  自9月xx日校工会、校团委发出向后港小学陈...
关于国家助学金感谢信范文 关于... 关于国家助学金感谢信篇一  尊敬的各位领导、老师:  你们好!  我很高兴能向国家和学校申请国家助学...
最新或2023(历届)助学金获...  助学金获奖感谢信范文篇一:  首先,感谢国家对我们贫困大学生的关怀和关爱。  xxxx年10月份我...
关于拾金不昧的感谢信精选范文 ... 拾金不昧的感谢信范文篇一  尊敬的县保健院领导及全体员工:  我叫XXX,于20XX年2月17日下午...
Java String字符串和... String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是...
暗夜发光,独自闪耀,盘点网页暗... 众所周知,网页的暗黑模式可以减少屏幕反射和蓝光辐射,减少眼睛的疲劳感&#...
周一早会主持词 周一早会主持词... 周一早会主持词  、爱我中华  爱家、爱厂、爱中华,五十六个民族是一家。下面请欣赏检验班带给我们的《...
生日庆典主持词 生日庆典主持词... 生日庆典主持词  各位亲朋、各位来宾:  大家中午好!   在这里,我受主人之托,以尽主持之礼,由于...
历史的追忆主持词 历史的追忆主... 历史的追忆主持词  历史的长河远远流淌,如同我们身上流淌着的同血缘,让我们从四面八方相聚在这里。今天...
亲子运动会主持词 亲子运动会主... 亲子运动会主持词  一、开场台词  尊敬的各位激、亲爱的小朋友们,大家下午好:   在这片片红叶飞来...
庆国庆晚会主持词 庆国庆晚会主... 庆国庆晚会主持词  男:尊敬的各位领导,各位来宾、老师、同学,  合:大家晚上好!我是今晚的主持人\...
举一反三学python(2)—... Con_Info = ["王伟(男),河南郑州, 137****8331","杨秀娟(女),...