飞书golang的官方SDK
需求根据预授权code获取登录用户身份信息
接口文档
- open.feishu.cn/document/uk…
- 要求header定义 Content-Type、Authorization,但并有现成类似SetHeader方法 如何办呢?
当前req请求方式
req := larkauthen.NewCreateAccessTokenReqBuilder().
Body(larkauthen.NewCreateAccessTokenReqBodyBuilder().
GrantType(`authorization_code`).
Code(`xMSldislSkdK`).
Build()).
Build()
// 发起请求
resp, err := client.Authen.AccessToken.Create(context.Background(), req)
看源码
Create方法可以传一个不定参,类型 larkcore.RequestOptionFunc
而RequestOptionFunc类型为 type RequestOptionFunc func(option *RequestOption)
- 实际为 一个函数并且入参为 larkcore.RequestOption
继续查看源码发现
RequestOption 有 Header 字段,类型为 http.Header
有戏
而且有一个WithHeaders函数,省事儿了
func WithHeaders(header http.Header) RequestOptionFunc {
return func(option *RequestOption) {
option.Header = header
}
}
简单了。那就修改代码为
requestOptionFunc := larkcore.WithHeaders(http.Header{
"Content-Type": {"application/json; charset=utf-8"},
"Authorization": {"Bearer " + token},
})
// 发起请求
resp, err := client.Authen.AccessToken.Create(context.Background(), req, requestOptionFunc)
这样就可以把http header参数传入 ,并且通过 WithHeaders 返回requestOptionFunc 类型
这样就不用自己构建 RequestOptionFunc,非常方便、简单,且满足了需求。
抛砖引玉而已,笔者目的是 希望大家多看源码,对于不完善SDK、只能自己挖掘自己实现