Golang学习笔记之网络包net/http

Golang 语雀内容系统(1) 简单web服务 实现功能 主要实现一个简单web服务,主要功能 ● 首页 ● 文章详情页 ● 文章列表页 ● 搜索功能 主要知识点 ● net/http 网络包 ● html/template 模板解析 ● github.com/gorilla/mux HTTP请求多路复用器 阅读详情

Get访问网址,获取响应,可得到header,status,statuscode等

const URL = "127.0.0.1:8080"
Resp, err := http.GET(URL)

如果要添加cookie,添加头部参数,用http.Do(req)

//新建一个请求对象
Req,err := http.NewRequest(“GET”,”URL”,strings.NewReader(“mobile=xxxxxxxxxx&isRemberPwd=1
”))
//设置请求头
Req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
)
//进行访问
Resp,err := http.Do(req)

Go http 服务端
Go处理http请求主要跟两个东西相关,
URL路由注册 ServerMux
URL处理函数 Handler
(之前学习过python的django框架,所以能够理解,就是django里的urlconf跟view)

Handler 负责输出http响应等头跟正文,任何满足http.Handler接口对象都可作为一个处理器,通俗的说,对象只要有如下签名的ServerHTTP方法即可

ServerHTTP(http.ResponseWriter,*http.Request)

Golang内置来几个函数作为处理器FileServer,NotFoundHandler 和 RedirectHandler

例子

//创建一个空的url路由
mux := http.NewServerMux() 
//创建一个新的处理器,该处理器将收到的所有请求都执行重定向到url去
Rh := http.RedirectHandler(url,code) 
//将创建的处理器注册到url路由中
Mix.Handler(“/“,Rh) 
//建立新的服务器,并通过ListenAndServer函数监听所有请求,并传入mux进行匹配。
http.ListenAndServer(“:port”, mux) 

ListenAndServer接收两个参数,adds string, handler Handler,但是我们传入的是一个mux,为ServerMux类型,为什么没出错?因为ServerMux实现了ServerHTTP方法,故也可以视为Handler,即接口的泛型

函数也能作为方法的接收者??答案是可以,可以用闭包

自定义处理器

type timeHandler struct {
	format string
}

func (th *timeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	tm := time.Now().Format(th.format)
	w.Write([]byte("The time is: " + tm))
}

timeHandler 实现了ServeHTTP方法,可以视为ServerHTTP对象。即可当作处理器

让函数也能变成处理器,通过http.HandlerFunc类型来让一个常规函数满足作为一个Handler接口的条件。

任何函数有(http.ResponseWriter, *http.Request)参数的,都能通过http.HandlerFunc(MyFunc)将其转化为HandlerFunc类型,转称该类型后,HandlerFunc内置了ServerHTTP方法,故MyFunc就成为了处理器

func timeHandler(w http.ResponseWriter, r *http.Request) {
	tm := time.Now().Format(time.RFC1123)
	w.Write([]byte("The time is: " + tm))
}

//将timeHandler转化为http.HandlerFunc类型
th := http.HandlerFunc(timeHandler)
然后就可以注册到url路由里了

有一个快捷的方法,mux里有个函数可以将转换跟注册放到一个函数里完成

mux.HandlerFunc(“/”,MyFunc)

但是这种方式不适合传递参数
有一种解决办法是将该函数写成闭包

func timeHandler(format string) http.Handler {
	fn := func(w http.ResponseWriter, r *http.Request) {
		tm := time.Now().Format(format)
		w.Write([]byte("The time is: " + tm))
	}
	return http.HandlerFunc(fn)
}

该闭包返回http.HandlerFunc()处理过后的处理器函数。

也可以这么写-先转换再返回

func timeHandler(format string) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		tm := time.Now().Format(format)
		w.Write([]byte("The time is: " + tm))
	})
}

或者这样返回的时候再转换

func timeHandler(format string) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		tm := time.Now().Format(format)
		w.Write([]byte("The time is: " + tm))
	}
}

DefaultServerMux
当我们不通过http.NewServerMux()创建mux的时候(不显式声明mux),会使用默认的DefaultServerMux,它随net/http包初始化而初始化。使用默认mux的流程

  th := http.HandlerFunc(timeHandler)

  http.Handle("/time", th)

  log.Println("Listening...")

  http.ListenAndServe(":3000", nil)

如有错误,欢迎指正交流

GO语言基础教程(162)Go包管理之常用内置包:Go语言内置包深度指南:解锁高效编程的隐藏技巧 Go语言的标准库就像一把编程瑞士军刀,拥有超过150个内置包,涵盖了从基础输入输出到网络编程和并发处理的方方面面。本文将深度解析fmt、strings、net/http和sync等核心内置包,通过实用示例展示如何利用它们构建高效可靠的应用程序。无论你是Go语言新手还是老司机,掌握这些内置包都能极大提升编码效率,避免重复造轮子。 阅读详情

相关推荐

Go-gopacket-为Go提供网络数据包处理功能

gopacket - 为Go提供网络数据包处理功能

Go最新TCP、UDP数据包大小的限制_udp发送超过1500字节,2024年最新网易云的朋友给我这份339页的Golang面经

​ MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64Bytes最大不能超过1518Bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。

2401_84919706的博客 1248

Tlsr8258开发-程序烧写

开源一小步,进步一大步

自学嵌入式 1774

从入门到精通:使用Go语言net包打造稳定的网络服务

Go语言的net包为开发者提供了一系列用于网络交互的接口和实现,支持广泛的网络层协议和功能。这些功能不仅包括基本的数据传输,也包括复杂的网络连接管理和服务构建。使用net包,开发者可以轻松地构建TCP、UDP、IP等协议的网络应用。net通过本文的学习,我们详细探讨了Go语言的net包,从基础的TCP和UDP网络编程到高级的网络优化和安全设置。net包作为Go标准库中的核心部分,为网络应用的开发提供了强大的支持,使开发者能够轻松地构建高效、安全的网络服务。net。

walkskyer的博客 2669

DW1000芯片实战:如何用UWB技术打造10厘米精度的室内定位系统(附Arduino代码)

本文是一份基于DW1000芯片和UWB技术的实战指南,详细介绍了如何从零构建一个精度可达10厘米的室内定位系统。内容涵盖硬件选型与连接、软件环境配置、核心的双向测距算法实现,并深入探讨了信号干扰抑制、功耗优化等实战挑战,为物联网开发者提供了完整的Arduino代码和部署思路。

root9的博客 497

Kylin-Desktop-V10-SP1-General-Release-2303-X86_64-海光版(hygon c86)安装与配置指南

本文提供了在国产海光C86处理器平台上安装与配置Kylin Desktop V10 SP1操作系统的详细指南。内容涵盖从下载专用镜像、制作启动盘、BIOS关键设置、磁盘分区方案,到系统安装后的驱动优化、必备软件安装及常见故障排除,旨在帮助用户顺利完成hygon c86平台的系统部署与优化。

tree的博客 1371

Golang网络编程net包浅析

新钛云服已累计为您分享665篇技术干货最近做了一个项目,其中用到了网络编程,下面和大家分享下在Go中网络编程的实现。在Go中, 网络编程主要通过 net 包实现。支持 包括TCP/IP、UDP、域名解析和Unix域socket等连接,此外,还通过 net/http ,net/rpc 等提供了 HTTP,RPC等主流应用层的连接协议。1、TCP 服务TCP 是最常用的网络连...

NewTyun的博客 2640

CentOS7下Node.js v20+安装与常见依赖库问题解决指南

本文详细介绍了在CentOS7系统下安装Node.js v20+的完整流程及常见依赖库问题的解决方案。通过升级glibc到2.28+、配置环境变量以及处理libstdc++版本问题,帮助开发者顺利在老旧系统上部署最新版Node.js,提升开发效率。

weixin_30689307的博客 157

go 网络请求包 resty

resty是 Go 语言的一个 HTTP client 库。resty功能十分强大,特性丰富,并提供了简单易用的 API。

码刀攻城 2736

开关电源辅助电源设计全流程拆解

地类型定义包含电路功率地(PGND)高压侧地,与主功率电路地相连整流桥负极、原边电感地、UC3842的功率地信号地(SGND)低压侧地,与控制/采样电路地相连副边整流管地、TL431地、MCU/运放地。

lyzh971103的博客 1469

AD620仪表放大器模组实战:从调零到信号放大的完整指南

本文详细介绍了AD620仪表放大器模组的实战应用,从调零到信号放大的完整指南。AD620模组以其专业级性能和易用性成为微弱信号放大的首选,集成了AD620芯片、LM358运放和7660电源转换芯片。文章提供了调零技巧、增益设置方法以及单端与差分输入的正确连接方案,并通过心电信号采集和称重传感器等实际案例展示了其广泛应用。

weixin_29290379的博客 377

golang net 网络包 常用方法

创建一个携带设置好的Transport信息的Client,并进行通信。创建Client,发送设置好的request。返回该错误的操作、网络类型和网络地址。读取主机DNS配置时出现的错误。

whatday的专栏 1771

化工过程设计软件:Aspen Plus二次开发_(2).二次开发概述

假设我们需要创建一个自定义的换热器模型,该模型能够计算两个物流之间的热交换量,并根据传热系数和换热面积进行调整。ACM 模型代码示例!自定义换热器模型!参数:传热系数 U (W/m^2·K)!换热面积 A (m^2)!热物流 T_hot_in (K), T_hot_out (K), F_hot (kmol/h)!冷物流 T_cold_in (K), T_cold_out (K), F_cold (kmol/h)!模型输入!U - 传热系数!A - 换热面积!

kkchenjj的博客 370

Golang:Go 网络包默认值下的陷阱

Go 网络包默认值下的陷阱 超时时间 HTTP响应主体 HTTP / 1.x保持活动 连接池 验证URI DNS缓存 伪装的DualStacknet.Dial()错误 net.IP 是可变的 奖励:GOMAXPROCS,容器和CFS 超时时间 设置它们! 网络不可靠,并且标准库默认客户端和服务器未设置其主要超时,并且所有这些都将零值解释为引导的无穷大。超时取决于用例,Go核心团队已避免进行任何笼统的概括。 注意:这也包括对包级别便利功能的所有使用: http.Get客户端朋友http.ListenAn

qq_41257365的博客 1736

基于STM32设计的ECG+PPG人体参数测量系统(华为云IOT)(217)

该系统的核心是基于STM32F103RCT6微控制器,这是一种高性能、低功耗的嵌入式处理器,适用于各种复杂的控制和数据处理任务。系统利用先进的传感器技术,如光电传感器PulseSensor模块来准确测量人体脉搏血氧饱和度及心率(PPG),同时采用AD8232生物电信号采集模块捕捉并处理人体的心电图信号(ECG),从而全面反映用户的心脏活动状态。

1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

golang 读取 http包读取流式响应正文_Golang net 包学习和实战

golang 的 net 包,相关接口和结构比较多,今天做个简单的梳理。网络模型 在总结 net 包之前,还需要温习模糊的网络模型知识。下图是大学课本上的网络模型图: 模型图中可以看到,OSI 的七层模型,每一层实现的是与对端相应层的通信接口。但是实际应用中,我们把会话层、表示层、应用层统称为应用层。因此,就变成了TCP/IP 的五层模型。其中网...

weixin_42477197的博客 891

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Golang net 包学习和实战

golang 的 net 包,相关接口和结构比较多,今天做个简单的梳理。网络模型 在总结 net 包之前,还需要温习模糊的网络模型知识。下图是大学课本上的网络...

weixin_46825193的博客 867

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Golang.org/x/net 性能优化终极指南:打造极致网络服务

Golang.org/x/net 是 Go 语言标准库的补充网络包,为开发者提供了强大的网络编程能力。这个库包含了 HTTP/2、QUIC、WebSocket、HTML 解析、DNS 消息处理等高级网络功能,是构建高性能网络服务的利器。本文将深入探讨如何通过最佳实践和性能优化技巧,充分利用 golang.org/x/net 打造极致的网络服务。 ## 📊 为什么选择 golang.org/x/

gitblog_00484的博客 339

19 Go网络编程(二):HTTP服务及HTTP客户端

一、HTTP概述 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状...

gofuncchan的博客 232

【Golang】(推荐项目)Go后端工程项目

在这个基于项目的课程中,我们将从头开始用 Go 构建一个完整的 REST API。本次项目将从构建一个简单的 TCP 服务器开始,目标是探索 Go 中的 net/http 包。本项目的目标是获得构建和推理一般后端系统的基础知识。

linjiuxiansheng的博客 896

golang的net包(网络编程)

net包的底层实现依赖于操作系统的网络API。net包提供了跨平台的网络编程接口,使得开发者可以在不同的操作系统上进行网络编程而无需担心底层实现的差异。虽然net包本身不提供直接的网络安全和加密功能,但可以与Go语言的crypto/tls等包结合使用来实现安全的网络通信。net包也提供了与goroutine等并发机制相结合的网络编程接口。

m0_51866860的博客 686

11.2 Go 常用包介绍

Go 语言的包非常强大,它们提供了构建高效、可靠应用程序所需的一切。通过深入理解并掌握这些包的使用技巧,开发者可以更加得心应手地解决各种编程问题。希望本文能够帮助开发者更深入地了解 Go 语言的常用包,并在实际开发中运用这些技巧。

专注于全栈开发领域 1011

.net语言_Go 语言 net 包学习和实战

golang 的 net 包,相关接口和结构比较多,今天做个简单的梳理。网络模型 在总结 net 包之前,还需要温习模糊的网络模型知识。下图是大学课本上的网络模型图: 模型图中可以看到,OSI 的七层模型,每一层实现的是与对端相应层的通信接口。但是实际应用中,我们把会话层、表示层、应用层统称为应用层。因此,就变成了TCP/IP 的五层模型。其中网...

weixin_39851457的博客 547

golang web编程之——读取csdn最新文章

利用go语言内置的各种网络包可以方便的进行web编程。本文章利用了csdn的开放API实现读取最新文章的需求。演示了go语言发起http get请求和json的umarshing特性。 原文:小宇的博客简单的http GET请求go语言内置了net/http包,采用http.Get能够方便的发起GET请求package mainimport ( "fmt" "io/ioutil"

小宇的博客 527

【基于Go的Web开发1】Web 本质 & 搭建第一个 HTTP 服务器

进行交互的应用网络。简单理解:我们通过浏览器 / App 去访问互联网上各种各样的资源,这就是 Web。包,不需要额外安装框架,就可以快速启动一个 Web 服务器。HTTP 就是客户端和服务器之间沟通的约定 (协议)。Go 自带的网络包,提供 HTTP 服务能力。

2503_92676540的博客 232
上一篇: Golang学习笔记之错误机制error以及异常处理机制panic-recover
下一篇: golang学习笔记之WEB框架ECHO
codeMore++
博客等级 码龄9年 6粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值