Skip to main content

moregeek program

go http 调用(下)-多极客编程

耐心和持久胜过激烈和狂热。

哈喽大家好,我是陈明勇,今天分享的内容是 Go HTTP 调用。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

前言

上篇文章 ​​Go HTTP 调用(上)​​​ 介绍了如何进行 HTTP 调用,并通过 GET 请求的例子,讲述了 ​​query​​​ 参数和 ​​header​​​ 参数如何设置,以及响应体的获取方法。 本文继上文,接下来会通过 ​​POST​​ 请求,对其他参数的设置进行介绍。

POST 请求

发起 ​​HTTP​​ ​​POST​​ 请求时,携带 ​​json​​ 格式的 ​​body​​ 参数是最常见的,这是因为 ​​json​​ 格式的参数可读性好,对于层级结构较为复杂的数据也能应对,并且这符合 ​​RestFul API​​ 的规范。因此以下的示例为:发送 ​​HTTP​​ ​​POST​​ 请求,并携带 ​​json​​ 类型的 ​​body​​ 参数。

import (
"bytes"
"context"
"encoding/json"
"fmt"
"io"
"net/http"
)

type User struct {
Username string `json:"username"`
Password string `json:"password"`
}

func main() {
client := http.Client{}

user := User{
Username: "123456",
Password: "12346",
}
dataByte, err := json.Marshal(user)
if err != nil {
fmt.Println(err)
}
bodyReader := bytes.NewReader(dataByte)

request, err := http.NewRequestWithContext(context.Background(), http.MethodPost, "http://localhost:8080/user", bodyReader)
if err != nil {
return
}
request.Header.Set("Content-Type", "application/json")
resp, err := client.Do(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("statusCode: ", resp.StatusCode)
body, err := io.ReadAll(resp.Body)
if err != nil {
return
}
defer resp.Body.Close()
fmt.Println(string(body))
}
  • 首先定义 ​​User​​​ 结构体,创建结构体变量 user,通过 ​​json.Marshal​​​ 函数,将 ​​user​​​ 转成 ​​[]byte​​​ 数据,然后通过 ​​bytes.NewReader​​​ 函数,将 ​​[]byte​​​ 数据转成 ​​Reader​​ 指针变量。
  • ​http.NewRequestWithContext​​​ 函数,最后一个参数是为 ​​body​​​ 参数,接收的变量类型是 ​​Reader​​​ 接口的实现体。第一步将 ​​user​​​ 转成 ​​Reader​​ 指针变量就是为了在这里进行传递。
  • 传递 ​​json​​​ 类型的 ​​body​​​ 参数,需要在请求头参数里设置 ​​Content-Type​​​ 的值为 ​​application/json​​。
  • 如果是发送 ​​application/x-www-form-urlencoded​​​ 类型的表单数据,需要改写 ​​body​​ 参数的生成代码:

values := url.Values{}
values.Set("username", "1234")
values.Set("password", "1234")
bodyReader := strings.NewReader(values.Encode())

小结

本文通过 ​​POST​​​ 请求,介绍了如何传递 ​​json​​​ 类型和 ​​application/x-www-form-urlencoded​​​ 类型的 ​​body​​​ 参数。对于 ​​HTTP​​​ 中的 ​​query​​​ 参数和 ​​body​​​ 参数的如何传递,上下两篇文章已经通过例子进行介绍。虽然举的例子是 ​​GET​​​ 和 ​​POST​​​ 请求,如果想要调用 ​​PUT​​​、​​DELETE​​​ 等请求,只需要在 ​​NewRequestWithContext​​​ 函数中,指定第二个参数为 ​​http.MethodPut​​​、​​http.MethodDelete​​ 等就行。

©著作权归作者所有:来自51CTO博客作者CMY陈明勇的原创作品,如需转载,请与作者联系,否则将追究法律责任

【都 java19 了,还不了解 java 8 ? 】一文带你深入了解 java 8 新特性-多极客编程

Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。(文章很长,建议点赞收藏)新特性以下是Java 8 新增的部分特性,更多新特性了解请详细参考:​​What's New in JDK 8​​•

java-枚举使用-多极客编程

枚举在本教程中,我们将了解什么是 Java 枚举、它们解决的问题以及它们的一些设计模式如何在实践中使用。1. 概述Java 5 首先引入了 enum 关键字。它表示一种特殊类型的类,它总是扩展 java.lang.Enum 类。有关使用的官方文档,我们可以转到​​文档​​。 以这种方式定义的常量使代码更具可读性,允许进行编译时检查,预先记录可接受值的列表,并避免由于传入无效值而导致的意外行为。2.

问题解决系列:cannot be resolved to absolute file path because it does not reside in the file system-多极客编程

问题场景springboot打包之后,读取资源文件内容,报错,报错提示如下:cannot be resolved to absolute file path because it does not reside in the file system: jar问题环境软件版本springboot2.1.1.RELEASE问题原因打包之后,spring没办法通过File的形式访问jar包里面的文件。解

支持向量机算法之鸢尾花特征分类【机器学习】-多极客编程

一.前言 1.1 本文原理 支持向量机(SVM)是一种二元分类模型。它的基本模型是在特征空间中定义最大区间的线性分类器,这使它不同于感知器;支持向量机还包括核技术,这使得它本质上是一个非线性分类器。支持向量机的学习策略是区间最大化,它可以形式化为求解凸二次规划的问题,等价于正则化铰链损失函数的最小化。支持向量机的学习算法是求解凸二次规划的优化算法。Scikit learn(sklearn)是机器学

朴素贝叶斯算法之鸢尾花特征分类【机器学习】【伯努利分布,多项式分布,高斯分布】-多极客编程

一.前言 1.1 本文原理 1.熟悉机器学习之朴素贝叶斯算法 2.使用朴素贝叶斯算法解决问题 贝叶斯定理是关于随机事件a和B的条件概率(或边际概率)的定理。其中p(a | B)是当B发生时a发生的可能性。 朴素贝叶斯算法: 对于样本集: 其中m表示有m个样本,N表示有N个特征。yi,i=1,2,。。,M表示样本类别,值为{c1,C2,…,ck}。 朴素贝叶斯分类的基本公式: 计算先验概率:计算

c语言学习笔记—数据类型转换-多极客编程

一、强制转换 强制转换,是通过类型转换运算来实现的。其一般形式为:(类型说明符)  (表达式)  其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。格式:(类型说明符)(表达式)二、隐式类型转换1、整型提升 (仅作用于char,short)1.1、整型提升的解释  C的整型算数运算中至少以整数类型的精度来进行。为了获得这个精度,表达式中的char和短整型short操作数再使用之前会被转换

go http 调用(上)-多极客编程

耐心和持久胜过激烈和狂热。哈喽大家好,我是陈明勇,今天分享的内容是 Go HTTP 调用。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!前言无论是微服务还是单体架构等,服务间都有相互通信的时候,而最直接的通信方法就是 ​​HTTP​​​ 调用,本文将会介绍在 ​​Go​​​ 语言里,如何进行 ​​HTTP​​ 调用,并举

go 结构体与 json 之间的转换-多极客编程

耐心和持久胜过激烈和狂热。哈喽大家好,我是陈明勇,今天分享的内容是 Go 结构体与 JSON 之间的转换。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!前言在日常开发中,我们往往会将 ​​JSON​​​ 解析成对应的结构体,反之也会将结构体或 ​​Map​​​ 数据转成 ​​JSON​​​。接下来本文会通过 ​​JSON

巧用 go map 特性对数组或切片去重-多极客编程

耐心和持久胜过激烈和狂热。哈喽大家好,我是陈明勇,今天分享的内容是巧用 Go Map 特性对数组或切片进行去重。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!前言在其他语言里(如 ​​Java​​​ )使用过 ​​Set​​​ 集合的小伙伴都知道,它的一个特点就是集合里的元素是不重复的。在一些需要去重场景中,我们可以使用

go语言性能剖析利器--pprof实战-多极客编程

作者:耿宗杰前言关于pprof的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考Go社区资料,结合自己的经验,实战Go程序的性能分析与优化过程。优化思路首先说一下性能优化的一般思路。系统性能的分析优化,一定是从大到小的步骤来进行的,即从业务架构的优化,到系统架构的优化,再到系统模块间的优化,最后到代码编写层面的优化。业务架构的优化是最具性价比的,技术难度相对较小,却可以带

go 实现线性查找算法和二分查找算法-多极客编程

耐心和持久胜过激烈和狂热。哈喽大家好,我是陈明勇,今天分享的内容使用 Go 实现线性查找算法和二分查找算法。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!线性查找线性查找又称顺序查找,它是查找算法中最简单的一种。它的基本思想是在在一组数据中,从第一个元素开始,依次和预期值比较,直到和预期值相等,则查找成功,如果所有元素都

一文掌握使用 go 标准库 sort 对切片进行排序-多极客编程

耐心和持久胜过激烈和狂热。哈喽大家好,我是陈明勇,今天分享的内容是使用 Go 标准库 sort 对切片进行排序。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!sort 标准库Sort 标准库提供了对基本数据类型的切片和自定义类型的切片进行排序的函数,常用函数如下表所示:函数描述Ints(x []int)对 int 类型的