如何在Golang中获得JWT的响应

I'm trying get the response from an API that uses JSON Web token, I need use the header : { Authorization: "Bearer token" } But I would like to keep the timeout of the http.Client that I'm using. How could I do it?

    var myClient = &http.Client{Timeout: 10 * time.Second}

func getJson(url string, target interface{}) error {
    r, err := myClient.Get(url)
    if err != nil {
        return err
    }
    defer r.Body.Close()

    return json.NewDecoder(r.Body).Decode(target)
}

net/http.Request has a Header field that you can directly edit, but this means you can't use the shortcut client.Get method. Something more like:

req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
        return err
}
req.Header = map[string][]string{
        "Authorization": {fmt.Sprintf("Bearer %s", jwt)},
}
r, err := myClient.Do(req)
...

You could do something like this,

func getJson(url string, target interface{}) error {
req, err := http.NewRequest(http.MethodGet, url, nil)
if nil != err {
    return err
}
r, err := myClient.Do(req)
if err != nil {
    return err
}
defer r.Body.Close()
return json.NewDecoder(r.Body).Decode(target)

}

Alternatively , you could also use context to control the request timeout

func getJsonWithContext(url string, target interface{}) error {
req, err := http.NewRequest(http.MethodGet, url, nil)
if nil != err {
    return err
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*1)
defer cancel()
reqWithContext := req.WithContext(ctx)
r, err := myClient.Do(reqWithContext)
if err != nil {
    return err
}
defer r.Body.Close()
return json.NewDecoder(r.Body).Decode(target)

}