[云原生] Go web工作流程
web工作流程
- Web服务器的工作原理可以简单地归纳为
- 客户机通过TCP/IP协议建立到服务器的TCP连接
- 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
- 服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
- 客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果
HTTP协议
-
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议
-
HTTP协议通常承载于TCP协议之上
talk is cheap , show me the code
package mainimport ("fmt""io/ioutil""log""net/http"
)func main() {//http://127.0.0.1:8000/go// 单独写回调函数http.HandleFunc("/go", myHandler)// addr:监听的地址// handler:回调函数http.ListenAndServe("127.0.0.1:8000", nil)
}// handler函数
func myHandler(w http.ResponseWriter, r *http.Request) {fmt.Println(r.RemoteAddr, "连接成功")// 请求方式:GET POST DELETE PUT UPDATEfmt.Println("method:", r.Method)// /gofmt.Println("url:", r.URL.Path)fmt.Println("header:", r.Header)fmt.Println("body:", r.Body)// 回复switch r.Method {case "GET":{w.Write([]byte("get"))}case "POST":{// 读取body内容content, err := ioutil.ReadAll(r.Body)if err != nil {log.Println("read post body occurs error: ", err)}fmt.Println("post body:", string(content))w.Write([]byte("post"))}default:{w.Write([]byte(r.Method))}}fmt.Println("end---")
}
package mainimport ("encoding/json""fmt""io""log""net/http""strings"
)type Data struct {Name string `json:"name"`Age int8 `json:"age"`
}func main() {//resp, _ := http.Get("http://www.baidu.com")//fmt.Println(resp)resp, _ := http.Get("http://127.0.0.1:8000/go")ResponseHandler(resp)fmt.Println("----")data := &Data{Name: "hello",Age: 18,}// 转换成json格式data_json, err := json.Marshal(data)if err != nil {log.Println("json.Marshaler error: ", err)}fmt.Println(string(data_json))resp, _ = http.Post("http://127.0.0.1:8000/go", "application/json", strings.NewReader(string(data_json)))ResponseHandler(resp)
}func ResponseHandler(resp *http.Response) {defer resp.Body.Close()// 200 OKfmt.Println(resp.Status)fmt.Println(resp.Header)buf := make([]byte, 1024)for {// 接收服务端信息n, err := resp.Body.Read(buf)if err != nil && err != io.EOF {fmt.Println(err)return} else {fmt.Println("读取完毕")res := string(buf[:n])fmt.Println(res)break}}
}
结果
> go run .\server.go
127.0.0.1:54856 连接成功
method: GET
url: /go
header: map[Accept-Encoding:[gzip] User-Agent:[Go-http-client/1.1]]
body: {}
end---
127.0.0.1:54856 连接成功
method: POST
url: /go
header: map[Accept-Encoding:[gzip] Content-Length:[25] Content-Type:[application/json] User-Agent:[Go-http-client/1.1]]
body: &{0xc0000b6048 <nil> <nil> false true {0 0} false false false 0x475080}
post body: {"name":"hello","age":18}
end---
> go run .\client.go
200 OK
map[Content-Length:[3] Content-Type:[text/plain; charset=utf-8] Date:[Mon, 25 Apr 2022 17:17:31 GMT]]
读取完毕
get
----
{"name":"hello","age":18}
200 OK
map[Content-Length:[4] Content-Type:[text/plain; charset=utf-8] Date:[Mon, 25 Apr 2022 17:17:31 GMT]]
读取完毕
post
http handler
的格式模板
// HandleFunc registers the handler function for the given pattern
// in the DefaultServeMux.
// The documentation for ServeMux explains how patterns are matched.
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {DefaultServeMux.HandleFunc(pattern, handler)
}
相关文章:
[云原生] Go web工作流程
web工作流程 Web服务器的工作原理可以简单地归纳为 客户机通过TCP/IP协议建立到服务器的TCP连接客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器…...
【PostgreSQL】约束-主键
【PostgreSQL】约束链接 检查 唯一 主键 外键 排他 主键 主键(Primary Key)是数据库表中用于唯一标识每一行记录的字段。主键具有以下特点: 唯一性:每个主键值在表中是唯一的,不允许出现重复值。非空性:…...

IDEA 控制台中文乱码问题解决方法(UTF-8 编码)
设置 IDEA 编码格式 1:打开 IntelliJ IDEA>File>Setting>Editor>File Encodings,将 Global Encoding、Project Encoding、Default encodeing for properties files 这三项都设置成 UTF-8 2:将 vm option 参数改为: -…...

ssm基于BS的仓库在线管理系统的设计与实现论文
摘 要 如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在世界上遥遥领先,让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#x…...

鸿蒙HarmonyOs:为什么不支持热更新?
学习了一段时间的鸿蒙开发,发现鸿蒙开发还是比较简单的,今天突然心血来潮,研究了一下鸿蒙热更新,最终得出的结论是鸿蒙暂时不支持热更新。 鸿蒙app开发主要是利用的ArkTs语言,ArkTs又是基于TypeScript语言的࿰…...
修改 Ubuntu 的配置
目录 一、修改地址 1. 修改本机IP 二、修改网关 1. 查看网关地址 2. 设置默认网关 三、重启网络 1. 重启网络 2. 刷新网络 四、修改主机名 1. 查看主机名 2. 修改主机名 一、修改地址 1. 修改本机IP sudo ifconfig en…...

虹科方案|从困境到突破:TigoLeap方案引领数据采集与优化
导读:在数字化工厂和智能制造的时代,数据已经成为优化机器和流程的关键。然而,如何高效地收集和处理这些数据,特别是在开发、部署和生产阶段,仍是企业面临的一大挑战。虹科TigoLeap平台,作为一款引领行业变…...

【教学类-43-02】20231226 九宫格数独2.0(n=9)(ChatGPT AI对话大师生成 回溯算法)
作品展示: 背景需求: 大4班20号说:我不会做这种(九宫格),我做的是小格子的, 他把手工纸翻过来,在反面自己画了矩阵格子。向我展示: “我会做这种!” 原来他…...

麒麟Kylin服务器版-破解root密码
一、单用户模式修改root密码 1.重启服务器系统后,将光标移动到第二项,按【e】键进入用户登录页面。 2.在【username】下方所在行输入root名称,【password】下方所在行输入密码Kylin123123后,进入编辑模式。代码如下: …...

cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~
2023-12-18 官方发布了PuTTY 0.80本次发布主要是针对Terrapin攻击(CVE-2023-48795)的修改发布。 更多详细的内容请查看PuTTY Change Log。 有关Terrapin攻击可用简单参考:警告!!!Terrapin攻击(CVE-2023-48795)~~~ 为了缓解此漏洞…...
向爬虫而生---Redis 拓宽篇1 < pipeline传输效率>
前言: 都知道,Redis是一款高效的内存数据库;每条命令都能很快响应,但是如果我们把服务器布在网络上,每次一个命令来回传送也是需要花费时间的; pipeline传输技术则是进一步提高Redis的性能和传输效率的一种方法。 正文: pipeline与普通命令发送方式的区别 Pipeline是一种机制&…...
Unity Hub 无法激活许可证
烦死了~ 😵💫 卸载UnityHub, 安装旧版本👈激活许可证, 如果出现旧版本无法识别Editor的情况需要卸载了再装最新版本的UnityHub...

数据分析求职-如何准备
今天咱们来聊一聊数据分析岗位求职到底需要准备什么?什么时间准备?该如何准备? 1. 求职时间轴 上图很清楚地把求职时间轴展示出来了,重复的话也不多说了,有两点想和同学们重点提下: 1)一定一定…...
新手能掌握 PyTorch 的填充技术:深入理解反射、复制、零值和常数填充
目录 torch.nn子模块详解 nn.ReflectionPad1d 参数说明: 形状(Shape): 使用示例: 注意事项: nn.ReflectionPad2d 参数说明: 形状(Shape): 使用示例…...

地震烈度速报与预警工程成功案例的经验分享 | TDengine 技术培训班第一期成功落地
近日,涛思数据在成都开设了“国家地震烈度速报与预警工程数据库 TDengine、消息中间件 TMQ 技术培训班”,这次培训活动共分为三期,而本次活动是第一期。其目标是帮助参与者深入了解 TDengine 和 TMQ 的技术特点和应用场景,并学习如…...

集群部署篇--Redis 集群动态伸缩
文章目录 前言一、redis 节点的添加1.1 redis 的实例部署:1.2 redis 节点添加:1.3 槽位分配:1.4 添加从节点: 二、redis 节点的减少2.1 移除主节点2.1.1 迁移槽位2.1.1 删除节点: 三、redis 删除节点的重新加入3.1 加入…...

excel中解决多行文本自动调整行高后打印预览还是显示不全情况
注意:此方法对于多行合并后单元格行高调整不适用,需要手动调整,如大家有简便方法,欢迎评论。 一、调整表格为自动调整行高 1)点击此处全选表格 2)在第一行序号单元格的下端,鼠标成黑十字时&am…...
策略模式+责任链模式配合Nacos实现参数校验链
1、业务场景 在SpringBoot项目中,针对接收的参数信息,根据需求要进行以下校验: 校验客户的apikey是否合法;校验请求的ip地址是否是白名单;校验短信的签名;校验短信的模板;校验手机号的格式合法…...

‘react-native‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
原因:没有下载react-native 解决下载react-native npm i -g react-native-cli...

c语言:求最小公倍数|练习题
一、题目 输入两个数,求两数的最小公倍数。 如图: 二、思路分析 1、先知道两个数里的最小值(比如:9和6,取6) 2、用2到6,5个数,同时除以9和6,得最小公约数:3 3、用9除33,6除32。得最小…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...