我正在努力创建一个用于管理数字海洋飞沫的小控制台,这是我第一次体验Go ..
我有这个错误
cannot use s (type []byte) as type io.Reader in argument to http.NewRequest:
[]byte does not implement io.Reader (missing Read method)
如何为func NewRequest转换一个好类型值的s []字节?! NewRequest期望Body类型为io.Reader ..
s, _ := json.Marshal(r);
// convert type
req, _ := http.NewRequest("GET", "https://api.digitalocean.com/v2/droplets", s)
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
req.Header.Set("Content-Type", "application/json")
response, _ := client.Do(req)
谢谢!
答案 0 :(得分:18)
正如@elithrar所说使用bytes.NewBuffer
b := bytes.NewBuffer(s)
http.NewRequest(..., b)
这将从*bytes.Buffer
创建[]bytes
。并且bytes.Buffer
实现了http.NewRequest
所需的io.Reader接口。
答案 1 :(得分:1)
由于您是从某个对象开始的,因此您可以使用 Encode
而不是
Marshal
:
package main
import (
"bytes"
"encoding/json"
"net/http"
)
func main() {
m, b := map[string]int{"month": 12}, new(bytes.Buffer)
json.NewEncoder(b).Encode(m)
r, e := http.NewRequest("GET", "https://stackoverflow.com", b)
if e != nil {
panic(e)
}
new(http.Client).Do(r)
}
答案 2 :(得分:1)
使用 bytes.NewReader 从 io.Reader
创建 []byte
。
s, _ := json.Marshal(r);
req, _ := http.NewRequest("GET",
"https://api.digitalocean.com/v2/droplets",
bytes.NewReader(s))