这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
作者:lomtom
个人网站:lomtom.top,
个人公众号:博思奥园
你的支持就是我最大的动力。
Go系列:
每个微服务应用难免会有远程调用,那么在JAVA里面,有很多种远程调用的方法,最基础的手写HTTP
调用,或者使用restTetmplate
,再到使用openfeign
仅仅写个接口就可以实现调用。
那么在Go语言里,Go也提供了Http
调用的包net/http
,或者使用http组件(gentleman、grequests、heimdall等)或者使用更高级的RPC
调用,也有rpc
框架(GRPC)。
那么在本章节探讨如何在Go语言里实现HTTP
调用。
接口定义
首先进行接口的定义,方便后续进行远程调用。
这里以JAVA
为例,以最常见的User
实体,来编写相对应的操作。
例如:
1 | bash复制代码GET 查询列表 |
实体类
1 | java复制代码@Data |
接口
其次,编写相应接口
1 | java复制代码@Api(tags = "用户管理") |
Http请求调用
基本的GET请求
1 | go复制代码// 基本的GET请求 |
结果:
1 | json复制代码2021/09/07 18:17:38 Greeting: |
GET请求 携带参数
若要在GET
请求后携带参数,可以选择在URL
后面进行拼接,当然也可以采用以下方式。
1 | go复制代码// GET请求 携带参数 (除了拼接) |
结果:
1 | json复制代码2021/09/07 18:17:38 Greeting: |
基本的POST请求(form)
注意:该方法对应的接口接受类型必须也为表单接收,那么在java的接口需要去掉save
方法里的@RequestBody
注解,否则将调用失败。
1 | go复制代码// 基本的POST请求 form |
结果:
1 | bash复制代码2021/09/07 18:22:12 Greeting: |
POST请求(body)
该方法为将参数放在请求的body
部分。
- 同样需要注意的是,在java的接口需要加上
save
方法里的@RequestBody
注解,否则将调用失败。 - 请求参数不能是自定义的结构体,必须是
map
类型,否则接口将匹配失败,猜测与自定义结构体的转换有关。 - 需要设置请求头部参数
resq.Header.Set("Content-Type", "application/json")
1 | go复制代码// POST请求 body |
结果:
1 | bash复制代码2021/09/08 16:05:30 Greeting: |
PUT 请求
对于net/http
,暂时提供了两种接口Get
和Post
,那么对于PUT
和DELETE
的实现,就需要使用它的高级功能了。
- 首先使用
http.NewRequest
申明一个新的请求,设置相对应的请求方式、url
、参数等 - 再使用
http.DefaultClient.Do(resq)
发起请求即可
1 | go复制代码// PUT 请求 |
结果:
1 | bash复制代码2021/09/08 16:09:47 Greeting: |
DELETE请求
1 | go复制代码func TestHttp5(t *testing.T) { |
结果:
1 | bash复制代码2021/09/08 16:14:14 Greeting: |
- 如果需要自定义请求头、自定义方法,都可以使用
http.NewRequest
和http.DefaultClient.Do(resq)
来完成。 - 如需设置
Header
参数,可采用resq.Header.Set("Content-Type", "application/json")
(参考POST请求)
每个微服务应用难免会有远程调用,那么在JAVA里面,有很多种远程调用的方法,最基础的手写HTTP
调用,或者使用restTetmplate
,再到使用openfeign
仅仅写个接口就可以实现调用。
那么在Go语言里,Go也提供了Http
调用的包net/http
,或者使用http组件(gentleman、grequests、heimdall等)或者使用更高级的RPC
调用,也有rpc
框架(GRPC)。
那么在本章节探讨如何在Go语言里实现HTTP
调用。
接口定义
首先进行接口的定义,方便后续进行远程调用。
这里以JAVA
为例,以最常见的User
实体,来编写相对应的操作。
例如:
1 | bash复制代码GET 查询列表 |
实体类
1 | java复制代码@Data |
接口
其次,编写相应接口
1 | java复制代码@Api(tags = "用户管理") |
Http请求调用
基本的GET请求
1 | go复制代码// 基本的GET请求 |
结果:
1 | json复制代码2021/09/07 18:17:38 Greeting: |
GET请求 携带参数
若要在GET
请求后携带参数,可以选择在URL
后面进行拼接,当然也可以采用以下方式。
1 | go复制代码// GET请求 携带参数 (除了拼接) |
结果:
1 | json复制代码2021/09/07 18:17:38 Greeting: |
基本的POST请求(form)
注意:该方法对应的接口接受类型必须也为表单接收,那么在java的接口需要去掉save
方法里的@RequestBody
注解,否则将调用失败。
1 | go复制代码// 基本的POST请求 form |
结果:
1 | bash复制代码2021/09/07 18:22:12 Greeting: |
POST请求(body)
该方法为将参数放在请求的body
部分。
- 同样需要注意的是,在java的接口需要加上
save
方法里的@RequestBody
注解,否则将调用失败。 - 请求参数不能是自定义的结构体,必须是
map
类型,否则接口将匹配失败,猜测与自定义结构体的转换有关。 - 需要设置请求头部参数
resq.Header.Set("Content-Type", "application/json")
1 | go复制代码// POST请求 body |
结果:
1 | bash复制代码2021/09/08 16:05:30 Greeting: |
PUT 请求
对于net/http
,暂时提供了两种接口Get
和Post
,那么对于PUT
和DELETE
的实现,就需要使用它的高级功能了。
- 首先使用
http.NewRequest
申明一个新的请求,设置相对应的请求方式、url
、参数等 - 再使用
http.DefaultClient.Do(resq)
发起请求即可
1 | go复制代码// PUT 请求 |
结果:
1 | bash复制代码2021/09/08 16:09:47 Greeting: |
DELETE请求
1 | go复制代码func TestHttp5(t *testing.T) { |
结果:
1 | bash复制代码2021/09/08 16:14:14 Greeting: |
- 如果需要自定义请求头、自定义方法,都可以使用
http.NewRequest
和http.DefaultClient.Do(resq)
来完成。 - 如需设置
Header
参数,可采用resq.Header.Set("Content-Type", "application/json")
(参考POST请求)
每个微服务应用难免会有远程调用,那么在JAVA里面,有很多种远程调用的方法,最基础的手写HTTP
调用,或者使用restTetmplate
,再到使用openfeign
仅仅写个接口就可以实现调用。
那么在Go语言里,Go也提供了Http
调用的包net/http
,或者使用http组件(gentleman、grequests、heimdall等)或者使用更高级的RPC
调用,也有rpc
框架(GRPC)。
那么在本章节探讨如何在Go语言里实现HTTP
调用。
接口定义
首先进行接口的定义,方便后续进行远程调用。
这里以JAVA
为例,以最常见的User
实体,来编写相对应的操作。
例如:
1 | bash复制代码GET 查询列表 |
实体类
1 | java复制代码@Data |
接口
其次,编写相应接口
1 | java复制代码@Api(tags = "用户管理") |
Http请求调用
基本的GET请求
1 | go复制代码// 基本的GET请求 |
结果:
1 | json复制代码2021/09/07 18:17:38 Greeting: |
GET请求 携带参数
若要在GET
请求后携带参数,可以选择在URL
后面进行拼接,当然也可以采用以下方式。
1 | go复制代码// GET请求 携带参数 (除了拼接) |
结果:
1 | json复制代码2021/09/07 18:17:38 Greeting: |
基本的POST请求(form)
注意:该方法对应的接口接受类型必须也为表单接收,那么在java的接口需要去掉save
方法里的@RequestBody
注解,否则将调用失败。
1 | go复制代码// 基本的POST请求 form |
结果:
1 | bash复制代码2021/09/07 18:22:12 Greeting: |
POST请求(body)
该方法为将参数放在请求的body
部分。
- 同样需要注意的是,在java的接口需要加上
save
方法里的@RequestBody
注解,否则将调用失败。 - 请求参数不能是自定义的结构体,必须是
map
类型,否则接口将匹配失败,猜测与自定义结构体的转换有关。 - 需要设置请求头部参数
resq.Header.Set("Content-Type", "application/json")
1 | go复制代码// POST请求 body |
结果:
1 | bash复制代码2021/09/08 16:05:30 Greeting: |
PUT 请求
对于net/http
,暂时提供了两种接口Get
和Post
,那么对于PUT
和DELETE
的实现,就需要使用它的高级功能了。
- 首先使用
http.NewRequest
申明一个新的请求,设置相对应的请求方式、url
、参数等 - 再使用
http.DefaultClient.Do(resq)
发起请求即可
1 | go复制代码// PUT 请求 |
结果:
1 | bash复制代码2021/09/08 16:09:47 Greeting: |
DELETE请求
1 | go复制代码func TestHttp5(t *testing.T) { |
结果:
1 | bash复制代码2021/09/08 16:14:14 Greeting: |
- 如果需要自定义请求头、自定义方法,都可以使用
http.NewRequest
和http.DefaultClient.Do(resq)
来完成。 - 如需设置
Header
参数,可采用resq.Header.Set("Content-Type", "application/json")
(参考POST请求)
每个微服务应用难免会有远程调用,那么在JAVA里面,有很多种远程调用的方法,最基础的手写HTTP
调用,或者使用restTetmplate
,再到使用openfeign
仅仅写个接口就可以实现调用。
那么在Go语言里,Go也提供了Http
调用的包net/http
,或者使用http组件(gentleman、grequests、heimdall等)或者使用更高级的RPC
调用,也有rpc
框架(GRPC)。
那么在本章节探讨如何在Go语言里实现HTTP
调用。
接口定义
首先进行接口的定义,方便后续进行远程调用。
这里以JAVA
为例,以最常见的User
实体,来编写相对应的操作。
例如:
1 | bash复制代码GET 查询列表 |
实体类
1 | java复制代码@Data |
接口
其次,编写相应接口
1 | java复制代码@Api(tags = "用户管理") |
Http请求调用
基本的GET请求
1 | go复制代码// 基本的GET请求 |
结果:
1 | json复制代码2021/09/07 18:17:38 Greeting: |
GET请求 携带参数
若要在GET
请求后携带参数,可以选择在URL
后面进行拼接,当然也可以采用以下方式。
1 | go复制代码// GET请求 携带参数 (除了拼接) |
结果:
1 | json复制代码2021/09/07 18:17:38 Greeting: |
基本的POST请求(form)
注意:该方法对应的接口接受类型必须也为表单接收,那么在java的接口需要去掉save
方法里的@RequestBody
注解,否则将调用失败。
1 | go复制代码// 基本的POST请求 form |
结果:
1 | bash复制代码2021/09/07 18:22:12 Greeting: |
POST请求(body)
该方法为将参数放在请求的body
部分。
- 同样需要注意的是,在java的接口需要加上
save
方法里的@RequestBody
注解,否则将调用失败。 - 请求参数不能是自定义的结构体,必须是
map
类型,否则接口将匹配失败,猜测与自定义结构体的转换有关。 - 需要设置请求头部参数
resq.Header.Set("Content-Type", "application/json")
1 | go复制代码// POST请求 body |
结果:
1 | bash复制代码2021/09/08 16:05:30 Greeting: |
PUT 请求
对于net/http
,暂时提供了两种接口Get
和Post
,那么对于PUT
和DELETE
的实现,就需要使用它的高级功能了。
- 首先使用
http.NewRequest
申明一个新的请求,设置相对应的请求方式、url
、参数等 - 再使用
http.DefaultClient.Do(resq)
发起请求即可
1 | go复制代码// PUT 请求 |
结果:
1 | bash复制代码2021/09/08 16:09:47 Greeting: |
DELETE请求
1 | go复制代码func TestHttp5(t *testing.T) { |
结果:
1 | bash复制代码2021/09/08 16:14:14 Greeting: |
- 如果需要自定义请求头、自定义方法,都可以使用
http.NewRequest
和http.DefaultClient.Do(resq)
来完成。 - 如需设置
Header
参数,可采用resq.Header.Set("Content-Type", "application/json")
(参考POST请求)
本文转载自: 掘金