快速上手GO的net/http包,个人学习笔记
更多个人笔记:(仅供参考,非盈利)
gitee: https://gitee.com/harryhack/it_note
github: https://github.com/ZHLOVEYY/IT_note
针对GO中net/http包的学习笔记
基础快速了解
创建简单的GOHTTP服务
func main() { http.HandleFunc("/hello", sayHello) http.ListenAndServe(":8080", nil) //创建基本服务
} func sayHello(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello, World!"))
}
访问8080/hello进行测试
Handler接口定义:(这部分后面又详细解释)
type Handler interface { ServeHTTP(ResponseWriter, *Request)
}
//只要有ServeHTTP方法就行
可以自己实现这个接口
同时http提供了handlerFunc结构体
type HandlerFunc func(ResponseWriter, *Request)
// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
f(w, r)
}
//本质上就是调用自身,因为也是一个函数,不过serveHTTP的内容自己可以定义改动
和之前的HandleFunc区分,HandleFunc是用来给不同路径绑定方法的,少一个r
那么只要满足Handlerfunc 的签名形式,就可以进行类型转换
- 类型转换的正常的理解例子
type yes func(int, int) int
func (y yes) add(a, b int) int { return a + b
}
func multiply(a, b int) int { fmt.Println(a * b)return a * b
}
func main() { multiply(1, 2) //2ans := yes(multiply) //将multiply进行转换 res := ans.add(1, 2) fmt.Println(res) //3
}
http.HandleFunc("/hello", hello)
这个后面的签名只要是 func(ResponseWriter, *Request)
就可以了
但是
http.ListenAndServe(":8080", referer)
这个后面的函数需要是满足Handler接口,有serveHTTP方法
尝试搭建检测是在query中有name = red
即http://localhost:8080/hello?name=red
发现会有重复覆盖路由的问题,因为listenandServe会拦截所有的路由,后面再解决
type CheckQueryName struct {wantname stringhandler http.Handler
}func (this *CheckQueryName) ServeHTTP(w http.ResponseWriter, r *http.Request) {queryParams := r.URL.Query() //获取get请求的queryname := queryParams.Get("name")if name == "red" {this.handler.ServeHTTP(w, r) //其实就是调用本身,下面变为checkforname了} else {w.Write([]byte("not this name"))}
}func checkforname(w http.ResponseWriter, r *http.Request) {w.Write([]byte("check is ok"))
}func hello(w http.ResponseWriter, r *http.Request) {w.Write([]byte("hello"))
}func main() {thecheck := &CheckQueryName{ //用&因为serveHTTP方法定义在指针接收器上wantname: "red",handler: http.HandlerFunc(checkforname),}http.HandleFunc("/hello", hello) //满足func(ResponseWriter, *Request)签名就可以http.ListenAndServe(":8080", thecheck) //直接监视8080的所有端口,拦截所有路由
}
编写简单的GET请求客户端
利用defaultclient或者自己定义client都可以
func main() {resp, err := http.DefaultClient.Get("https://api.github.com")if err != nil {panic(err)}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {panic(err)}fmt.Println(string(body))time.Sleep(time.Second * 2) //等待获取请求
}
但是如果把网址换成baidu.com就会获取不到,这是因为转发,以及没有User-agent的问题
编写自定义的GET请求客户端
利用http.Client可以进行自定义
func main() {client := &http.Client{// 允许重定向CheckRedirect: func(req *http.Request, via []*http.Request) error {return nil},}req, err := http.NewRequest("GET", "https://www.baidu.com", nil)if err != nil {panic(err)}// 添加请求头req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")resp, err := client.Do(req) //do执行HTTP请求的整个周期包括请求准备,建立连接,发送请求,请求重定向,接收响应等等defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {panic(err)}fmt.Println(string(body))time.Sleep(time.Second * 2)
}
发现可以接受到baidu的网页html信息
编写默认的post请求客户端
func main() {postData := strings.NewReader(`{"name": "张三", "age": 25}`)resp, err := http.DefaultClient.Post("http://localhost:8080/users","application/json", postData,)if err != nil {fmt.Printf("POST请求失败: %v\n", err)return}defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)fmt.Printf("POST响应: %s\n", string(body))
}
string.NewReader是一种方法将格式改为io reader可以读取的形式,接收的话也可以postData.Read读取。
这一类的方式比较多,不一一汇总
对应的server.go (需要在终端中go run server.go )两个终端分别运行服务端,客户端
func main() {// 处理 /users 路径的 POST 请求http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {// 只允许 POST 方法if r.Method != http.MethodPost {w.WriteHeader(http.StatusMethodNotAllowed)fmt.Fprintf(w, "只支持 POST 方法")return}// 读取请求体body, err := ioutil.ReadAll(r.Body)if err != nil {w.WriteHeader(http.StatusBadRequest)fmt.Fprintf(w, "读取请求失败: %v", err)return}defer r.Body.Close()// 解析 JSON 数据,放入user中var user Userif err := json.Unmarshal(body, &user); err != nil {w.WriteHeader(http.StatusBadRequest) //写入状态码fmt.Fprintf(w, "JSON 解析失败: %v", err)return}// 设置响应头w.Header().Set("Content-Type", "application/json")// 构造响应数据response := map[string]interface{}{"message": "success","data": map[string]interface{}{"name": user.Name,"age": user.Age,},}// 返回 JSON 响应json.NewEncoder(w).Encode(response) //将 response 对象转换为 JSON 格式并写入响应//等价于:// jsonData, err := json.Marshal(response)// if err != nil {// w.WriteHeader(http.StatusInternalServerError)// return// }// w.Write(jsonData)})// 启动服务器fmt.Println("服务器启动在 :8080 端口...")if err := http.ListenAndServe(":8080", nil); err != nil {panic(err)}
}
多路复用器
DefaultServeMux一般不会使用,因为会有冲突等等问题,所以一般用NewServeMux直接创建
type apiHandler struct{}func (apiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {w.Header().Set("Content-Type", "application/json")fmt.Fprintf(w, `{"message": "API response"}`)
}func main() {mux := http.NewServeMux()mux.Handle("/api/", apiHandler{}) //多引入结构体,后面会知道有好处// mux.HandleFunc("/api/", func(w http.ResponseWriter, req *http.Request) {// w.Header().Set("Content-Type", "application/json")// fmt.Fprintf(w, `{"message": "API response from HandleFunc"}`)// }) //和上面等效mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {if req.URL.Path != "/" {http.NotFound(w, req)return}fmt.Fprintf(w, "Welcome to the home page!")})fmt.Println("Server running on :8080")http.ListenAndServe(":8080", mux)//用server:= &http.Server创建地址和handler,然后server.ListenAndServe也是一种表现方式}
mux和http.HandleFunc()的区别:
mux 可以创建多个路由器实例,用于不同的目的。同时可以为不同的路由器配置不同的中间件(用着先)
第三方有库httprouter,比如可以解决url不能是变量代表的问题,了解就行
更多都是使用restful API进行开发的~目前的了解有个概念就行
处理器函数
Handle
注册处理器过程中调用的函数:Handle
type username struct {name string
}func (this *username) ServeHTTP(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "%s", this.name)
}func main() {mux := http.NewServeMux()mux.Handle("/jack", &username{name: "jack"}) //会调用对应的serveHTTP方法mux.Handle("/lily", &username{name: "lily"})//可以为不同的路径使用相同的处理器结构体,但传入不同的参数//这就是比用handleFunc()更灵活的地方server := &http.Server{Addr: ":8080",Handler: mux,}if err := server.ListenAndServe(); err != nil { //防止错误panic(err)}
}
HandlleFunc
处理器函数:HandleFunc
(注意不是HandlerFunc,没有r !! HandleFunc 是处理器函数)
之前已经学习过,定义就是
func HandleFunc(pattern string, handler func(ResponseWriter, *Request))
深入源代码会发现内部也是借助serveMux对象,从而实现了Handler的ServeHTTP()方法的
Handler
Handler就是处理器接口,实现ServeHTTP方法的,之前展示过
type Handler interface {ServeHTTP(ResponseWriter, *Request)
}
HandlerFunc
HandlerFunc是结构体,用于实现接口的
定义:
type HandlerFunc func(ResponseWriter, *Request)
用于连接处理器Handle和处理器函数HandleFunc,它实现了 Handler 接口,使得函数可以直接当作处理器使用:
- 理解“连接连接处理器Handle和处理器函数HandleFunc”:(之前也学过)
// 方式一:普通函数
func hello(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello!")
}
// 注册方式一:将函数转换为 HandlerFunc
http.Handle("/hello", http.HandlerFunc(hello))// 方式二:直接使用 HandleFunc
http.HandleFunc("/hello", hello)
处理请求
请求分为:请求头,请求URL,请求体等
html表单的enctype属性
在postman的body部分可以查看
- application/x-www-form-urlencode
url方式编码,较为通用,get和post都可以用 - multipart/form-data
通常适配post方法提交 - text/plain
适合传递大量数据
ResponseWriter接口涉及方法
- 补充:
fmt.Fprint和fmt.Fprintln能够写入ResponseWriter是因为ResponseWriter实现了io.Writer
接口,fmt.Fprint/Fprintln将数据按格式转换为字节流(如字符串、数字等),最终调用io.Writer的Write方法
Writeheader
curl -i localhost:8080/noAuth
或者使用postman进行验证
func noAuth(w http.ResponseWriter, r *http.Request) {w.WriteHeader(401)fmt.Fprint(w, "没有授权,你需要认证后访问")
}func main() {http.HandleFunc("/noAuth", noAuth)err := http.ListenAndServe(":8080", nil)if err != nil {fmt.Println(err)}
}
Header
调用了Writeheader后的话就不能对响应头进行修改了
curl -i http://localhost:8081/redirect
(可以直接看到301)或者postman验证
- 重定向代码
func Redirect(w http.ResponseWriter, r *http.Request) {w.Header().Set("Location", "http://localhost:8080/hello")// 必须使用包括http的完整的URL!w.WriteHeader(301)
}
func main() {http.HandleFunc("/redirect", Redirect)if err := http.ListenAndServe(":8081", nil); err != nil {panic(err)}
}
- 主服务代码
func sayHello(w http.ResponseWriter, r *http.Request) {w.Write([]byte("hello !!"))
}func main() {http.HandleFunc("/hello", sayHello)http.ListenAndServe(":8080", nil) //创建基本服务
}
write
之前都有demo,就是写入返回,注意需要是[]byte()这样的表示形式
如果不知道content-type格式可以通过数据的前512 比特进行确认
除了一般的文本字符串之外,还可以返回html和json,下面给出json的示范
type language struct {Language string `json:"language"` //反引号// 字段名首字母需要大写才能被 JSON 序列化!!!!
}func uselanguage(w http.ResponseWriter, r *http.Request) {uselanguageis := language{Language: "en"}message, err := json.Marshal(uselanguageis)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}w.Header().Set("Content-Type", "application/json") //通过json形式传递w.Write(message)
}func main() {http.HandleFunc("/lan", uselanguage)if err := http.ListenAndServe(":8080", nil); err != nil {panic(err)}
}
注意一些格式上的细节,比如字段名首字母需要大写才能被 JSON 序列化
相关文章:
快速上手GO的net/http包,个人学习笔记
更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 针对GO中net/http包的学习笔记 基础快速了解 创建简单的GOHTTP服务 func …...
Flask + ajax上传文件(二)--多文件上传
Flask多文件上传完整教程 本教程将详细介绍如何使用Flask实现多文件上传功能,并使用时间戳为上传文件自动命名,避免文件名冲突。 一、环境准备 确保已安装Python和Flask pip install flask项目结构 flask_upload/ ├── app.py ├── upload/ # 上传文…...
sysstat介绍以及交叉编译
文章目录 1. 工具集介绍2. 指令使用参考3. 交叉编译3.1 源码下载3.2 编译步骤 4. 工具验证4.1 将相关工具导入到设备4.2 功能验证 1. 工具集介绍 Sysstat 是一个功能强大的 Linux 系统性能监控工具包,提供实时监控和历史数据分析功能,帮助管理员优化系统…...
常见正则表达式整理与Java使用正则表达式的例子
一、常见正则表达式整理 1. 基础验证类 邮箱地址 ^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\\.[a-zA-Z]{2,}$ (匹配如 userexample.com)手机号 ^1[3-9]\\\\d{9}$ (匹配国内11位手机号,如 13812345678)中文字符 ^[\u4e00-\u9fa5…...
UE5 Assimp 自用
记录一下配assimp库到ue中的过程。因为想在ue里面实现一些几何处理(虽然ue好像有相关的geo的代码),遂配置了一下assimp。 1. 编译整理生成自己所需要的文件。cmake编译,下载github 的官方的assimp-master,然后cmake都是默认的就行…...
java—12 kafka
目录 一、消息队列的优缺点 二、常用MQ 1. Kafka 2. RocketMQ 3. RabbitMQ 4. ActiveMQ 5. ZeroMQ 6. MQ选型对比 适用场景——从公司基础建设力量角度出发 适用场景——从业务场景角度出发 四、基本概念和操作 1. kafka常用术语 2. kafka常用指令 3. 单播消息&a…...
VS Code 智能代理模式:重塑开发体验
在编程领域,效率与精准度无疑是开发者们永恒的追求。而如今,VS Code 推出的智能代理模式(Agent Mode),正以前所未有的方式,彻底颠覆了传统开发流程,为程序员们带来了一场前所未有的效率革命。本…...
基于深度学习和单目测距的前车防撞及车道偏离预警系统
随着人工智能与计算机视觉技术的飞速发展,高级驾驶辅助系统(ADAS)已成为现代汽车智能化的关键标志。它不仅能有效提升行车安全,还能为自动驾驶时代的全面到来奠定坚实基础。本文深入剖析一套功能完备、基于深度学习模型的 ADAS 系统的架构与核心实现,带您领略智能驾驶背后…...
第二篇:Django配置及ORM操作
第二篇:Django配置及ORM操作 文章目录 第二篇:Django配置及ORM操作一、静态文件配置1、为什么要配置静态文件?2、如何配置静态文件?3、静态文件动态解析4、form表单默认是get请求数据 二、request对象方法初识三、pycharm链接数据…...
亚马逊英国站FBA费用重构:轻小商品迎红利期,跨境卖家如何抢占先机?
一、政策背景:成本优化成平台与卖家共同诉求 2024年4月,亚马逊英国站(Amazon.co.uk)发布近三年来力度最大的FBA费用调整方案,标志着英国电商市场正式进入精细化成本管理时代。这一决策背后,是多重因素的叠…...
算法时代的“摩西十诫”:AI治理平台重构数字戒律
一、引言 数字时代的狂飙突进中,人工智能(AI)正以颠覆性的力量重塑人类社会。从医疗诊断到金融决策,从智能制造到舆论传播,AI的触角已延伸至每个角落。 然而,斯坦福大学《2024年人工智能指数报告》揭示的…...
Kafka的ISR机制是什么?如何保证数据一致性?
一、Kafka ISR机制深度解析 1. ISR机制定义 ISR(In-Sync Replicas)是Kafka保证数据一致性的核心机制,由Leader副本(复杂读写)和Follower副本(负责备份)组成。当Follower副本的延迟超过replica.lag.time.max.ms&#…...
Flink 消费 Kafka 数据流的最佳实践
一、前言:Kafka 只是开始,消费才是关键 Kafka 提供了优雅的 Topic 管理与消息缓冲机制,但只有当 Flink 能稳定、有序、无数据丢失地消费并处理这些数据流,实时数仓系统才真正发挥作用。 本篇将围绕 Flink 如何“吃好” Kafka 数据…...
UEC++第10天|UEC++获取对象、RTTI是C++
最近在写UEC项目,这里写几个案例里的问题,还在学习阶段 1. 如何获取小鸟对象? void AFlappyBirdGameModeBase::BeginGame() { // 让管道动起来PipeActor->SetMoveSpeed();// 让小鸟开始飞行// 如何获取到小鸟对象APawn* Pawn UGameplayS…...
原生微信小程序,canvas生成凭证,保存到手机
原生微信小程序通过canvas可以将表单( 文本、图片 )转化成图片,同时添加水印,生成凭证,这里只是基本功能实现。可以继续完善和扩展。 <view class"container"><!-- Canvas 组件 --><canvas type"2d" id&…...
如何轻松将 Python 英文版切换至中文界面
Python 是一种广泛使用的编程语言,尤其在数据科学、人工智能和网络开发等领域。在最近的 Python 版本中,用户可以方便地使用多种语言,这也包括将 Python 界面语言从英文切换至中文。这不仅是出于用户体验的考虑,也能帮助初学者更快…...
2025.04.24【3D】3D绘图入门指南
Nifty graph A contribution by Matt Asher. 3D animation A 3D animated scatterplot made with R and rgl. 文章目录 Nifty graph3D animation 2025.04.24【3D】| 3D绘图入门指南什么是3D绘图?为什么使用3D绘图?如何在R中进行3D绘图?安装…...
R-CNN,Fast-R-CNN-Faster-R-CNN个人笔记
注:此博客主要为了方便笔者快速复习,只讲大致框架,只讲推理,不讲训练,因此内容不会很详实。 1.R-CNN R-CNN系列的开山之作。 本文将该框架划分为3个模块: 1.region proposal generator 2.CNN(…...
【深度学习核心技术解析】从理论到实践的全链路指南
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现(MNIST分类)运行结果验证 三、性能对比测试方法论量化数据对比结果分析 四…...
【QT网络】构建简单Udp回显服务器
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
浅谈国产数据库多租户方案:提升云计算与SaaS的资源管理效率
近年来,“数据库多租户”这一概念在技术圈内频频出现,成为云计算和SaaS(软件即服务)架构中的重要组成部分。多租户架构不仅为企业提供了高效的资源隔离与共享解决方案,还能大幅降低成本,提高系统的可扩展性…...
【霍夫变换】图像处理(OpenCV)-part11
20 霍夫变换 20.1 理解霍夫变换 霍夫变换的基本思想是将图像空间中的几何元素(如直线、圆等)通过参数方程转换到参数空间中,形成一个参数空间的累加器数组。图像空间中的每个点在参数空间中对应一个曲线或曲面,而几何形状在图像…...
Flink 源码编译
打包命令 打包整个项目 mvn clean package -DskipTests -Drat.skiptrue打包单个模块 mvn clean package -DskipTests -Drat.skiptrue -pl flink-dist如果该模块依赖其他模块,可能需要先将其他模块 install 到本地,如果依赖的模块的源代码有修改&#…...
React19源码阅读之commitRoot
commitRoot入口 在finishConcurrentRender函数,commitRootWhenReady函数,commitRoot函数。 commitRoot流程图 commitRoot函数 commitRoot 函数是 React 渲染流程中用于提交根节点的关键函数。它的主要作用是设置相关的优先级和状态,然后调…...
单 例 模 式
设计模式(Design Pattern)说白了就是一套方法论,是我们的前辈们不断试错总结出来的。一般意义上的设计模式有23种,分为创建型、结构型、行为型三大类。今天先拿最简单的单例模式开刀吧。 六大原则 在正式进入设计模式的学习之前&…...
如何在 Postman 中,自动获取 Token 并将其赋值到环境变量
在 Postman 中,你可以通过 预请求脚本(Pre-request Script) 和 测试脚本(Tests) 实现自动获取 Token 并将其赋值到环境变量,下面是完整的操作步骤: ✅ 一、创建获取 Token 的请求 通常这个请求…...
CentOS 7 基于 Nginx 的 HTML 部署全流程指南
一、Nginx 安装(两种主流方式) 1. YUM 安装(推荐新手) # 安装 EPEL 扩展源(部分系统需要) yum install epel-release -y# 安装 Nginx yum install nginx -y# 启动并设置开机自启 systemctl start nginx s…...
spring-ai使用Document存储至milvus的数据结构
1、 spring:application:name: spring-ai-alibaba-rag-milvus-exampleai:dashscope:api-key: sk-xxxxxxoooooovectorstore:milvus:client:host: xxx.ooo.mmm.nnnport: 19530username: rootpassword: MilvusdatabaseName: defaultcollectionName: vector_store#初始化 collecti…...
Milvus(6):Collection 管理分区、管理别名
1 管理分区 分区是一个 Collection 的子集。每个分区与其父集合共享相同的数据结构,但只包含集合中的一个数据子集。本页将帮助你了解如何管理分区。 1.1 分区概述 创建一个 Collection 时,Milvus 也会在该 Collection 中创建一个名为_default 的分区。…...
关于Safari浏览器在ios<16.3版本不支持正则表达式零宽断言的解决办法
异常原因 今天在升级Dify版本的时候发现低版本的ios手机出现了以下报错: SyntaxError: Invalid regular expression: invalid group specifier nameError: Invalid regular expression: invalid group specifier name Call Stack 46 eval [native code] (0:0) ./n…...
设计模式--建造者模式详解
建造者模式 建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式 定义:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示(假设有不同的建造者实现类,可以产生不同的产品)…...
玩转Docker | Docker部署LMS轻量级音乐工具
玩转Docker | Docker部署LMS轻量级音乐工具 前言一、LMS介绍LMS简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署LMS服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问LMS服务访问LMS首页注册账号五、基本使用上传音乐文…...
【前端】【业务场景】【面试】在前端项目中,当涉及大量数据渲染时,如何提高渲染性能并避免页面卡顿?
大量数据渲染性能优化:四层进阶法 循序渐进:先限量 → 再懒渲 → 后分批 → 终极后台协作 1 虚拟滚动:一次只保留“看得见”的节点 核心思路:固定容器高度,让滚动条滚动 假象 的总长度;可视窗口内…...
数据结构与算法实战:从理论到落地的深度探索
放在前面咯 数据结构与算法实战:从理论到落地的深度探索 数据结构与算法实战:从理论到落地的深度探索 在计算机科学的浩瀚宇宙中,数据结构与算法犹如璀璨星辰,指引着高效程序设计的方向。它们不仅是开发者解决复杂问题的核心利…...
大文件上传Demo及面试要点
大文件上传功能实现原理 - 面试解析 在面试中解释大文件上传功能的实现原理时,可以从以下几个方面进行说明: 1. 分片上传 (Chunked Upload) 实现原理 : 前端将大文件分割为固定大小(如5MB)的多个分片(Chunk)每个分片独立上传,…...
安宝特案例 | 物流仓储头部企业应用AR+作业流,规范日常安全点检,保障消防安全
安全点检管理的真实性缺失将会造成极大损失。 仓储物流行业有仓库面积大、货物堆放密集、包装材料易燃、整体货值高的特点,且造成火灾的隐患包括建筑结构隐患、消防设置失效、货物存放与操作隐患、电气系统问题、人为因素等,因此安全管理被放在重要位置…...
关于 xpath 查找 XML 元素的一点总结
测试环境 Win7 64 python 3.4.0 实践出真知 代码如下,更换不同的 xpath,和 response_to_check 进行测试 实验 1 xpath ".//xmlns:return//xmlns:copeWith" response_to_check \ <soap:Envelope xmlns"http://www.examp.com…...
JavaScript学习教程,从入门到精通,XMLHttpRequest 与 Ajax 请求详解(25)
XMLHttpRequest 与 Ajax 请求详解 一、XMLHttpRequest 概述 XMLHttpRequest (XHR) 是一个 JavaScript API,用于在浏览器和服务器之间传输数据,而无需刷新页面。它是实现 Ajax (Asynchronous JavaScript and XML) 技术的核心。 主要特点: …...
HTML、XHTML 和 XML区别
HTML、XHTML 和 XML 这三兄弟的区别 HTML: 老大哥,负责网页长啥样,性格比较随和,有点小错误也能容忍。XHTML: 二哥,看着像 HTML,但规矩严,是按 XML 的规矩来的 HTML,更规范。XML: 小弟…...
形象解释 HTTP 的四种常见请求方式及其中的区别联系
HTTP 的常见请求方式常见的有四种:GET、POST、PUT、DELETE,它们各自的功能不一样。 🍜 场景比喻:HTTP 请求像“去餐厅点菜” 请求方式行为餐厅比喻说明GET获取数据看菜单/问服务员:你们有什么菜?不带食材、…...
微信小程序根据图片生成背景颜色有效果图
效果图 取得是图片中间10个像素算出背景颜色 .wxml <canvas type"2d" id"imageCanvas" style"--w: {{w}}px;--h: {{h}}px;" /> <view style"background: {{backgroundColor}};"><image bind:tap"updateIndex&qu…...
实时步数统计系统 kafka + spark +redis
基于微服务架构设计并实现了一个实时步数统计系统,采用生产者-消费者模式,利用Kafka实现消息队列,Spark Streaming处理实时数据流,Redis提供高性能数据存储,实现了一个高并发、低延迟的数据处理系统,支持多…...
使用 Docker 安装 SQL Server 2022 并解决 Navicat 连接问题
在使用 Docker 安装 SQL Server 时,很多人可能遇到过无法通过 Navicat 等数据库客户端连接到容器的情况。尤其是尝试使用 mcr.microsoft.com/mssql/server:2022-latest 镜像时,可能会发现 Navicat一直转圈,无法连接到数据库。在这篇博客中&am…...
使用 Node、Express 和 MongoDB 构建一个项目工程
本文将详细介绍如何使用 Node.js Express MongoDB 构建一个完整的 RESTful API 后端项目,涵盖: 项目初始化 Express 服务器搭建 MongoDB 数据库连接 REST API 设计(CRUD 操作) 错误处理与中间件 源码结构与完整代码 部署建…...
基本元器件电阻、电容、电感的高频知识和大厂真题解析
本文首先举例分析各个方向的工程师如何定制化准备硬件岗位面试,各个击破; 然后根据实战经验总结硬件领域中电阻电容电感等的主要笔试、面试高频考题考点; 最后,列出最新最全的基本元器件笔试面试的真题和模拟题,供大家参考。 本专栏预计更新50期左右。当前第3期 一、硬件…...
Unity InputSystem触摸屏问题
最近把Unity打包后的windows软件放到windows触摸屏一体机上测试,发现部分屏幕触摸点击不了按钮,测试了其他应用程序都正常。 这个一体机是这样的,一个电脑机箱,外接一个可以触摸的显示屏,然后UGUI的按钮就间歇性点不了…...
分布式微服务架构,数据库连接池设计策略
在分布式微服务架构中,数据库连接池的设计远比单体应用复杂,涉及资源隔离、连接管理、性能调优和高可用等问题。下面是面向专业软件架构师的系统化分析与策略建议: 一、核心挑战 每个服务独立运行,连接池分散 每个微服务维护自己的…...
差分信号抗噪声原理:
差分信号抗噪声原理: 差分信号除了能很好地解决发送和接收参考点电位不同的问题外,差分信号的另一个重要优势就是在一定条件下其抗干扰能力比单端信号更强。对于单端信号传输,外界对它的干扰噪声直接叠加在信号上,接收端直接检测输…...
【数据分析】酵母实验多指标数据的 R 语言分析与可视化
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载必要的R包数据下载定义函数发育分析(development analysis)数据导入与预处理数据子集创建绘图模型分析两两比较生存分析(survival analysis)数据导入与预处理数据子集创建绘…...
AI | 最近比较火的几个生成式对话 AI
关注:CodingTechWork 引言 生成式对话 AI 正在迅速改变我们与机器交互的方式,从智能助手到内容创作,其应用范围广泛且深远。本文将深入探讨几款当前热门的生成式对话 AI 模型,包括 Kimi、DeepSeek、ChatGPT、文心一言、通义千问和…...