我正在写一个Go程序,其中我只是使用 -
来确定服务器的响应tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
link := "address of server"
resp, err := client.Get(link)
现在我需要将resp转换为字节,以便我可以将其传递给某个函数,而另一方可以将其解码为相同的结构。 resp是http包中定义的http.Response类型的结构,我无法更改。
我想将其直接转换为字节。
golang中是否有任何我可以直接使用的功能,或者是否存在任何相同的功能。
答案 0 :(得分:2)
您想使用go的库中的encode包。通常我喜欢JSON编码,因为它非常人性化,但是这个包支持多种格式的编码,包括二进制和gob,这是一种专为你想要做的设计的格式。
go documentation编码为json的示例:
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() {
type ColorGroup struct {
ID int
Name string
Colors []string
}
group := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
}
b, err := json.Marshal(group)
if err != nil {
fmt.Println("error:", err)
}
os.Stdout.Write(b)
}
从json中解码的documentation示例:
package main
import (
"encoding/json"
"fmt"
)
func main() {
var jsonBlob = []byte(`[
{"Name": "Platypus", "Order": "Monotremata"},
{"Name": "Quoll", "Order": "Dasyuromorphia"}
]`)
type Animal struct {
Name string
Order string
}
var animals []Animal
err := json.Unmarshal(jsonBlob, &animals)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", animals)
}
答案 1 :(得分:0)
这个怎么样?
bodyBytes, err := ioutil.ReadAll(response.Body)
您可以将其用作字节或简单地将ir转换为字符串,如此
bodyString := string(bodyBytes
)
答案 2 :(得分:0)
答案 3 :(得分:0)
我不确定是否误解了您的问题。但这是一个如何将结构转换为[] byte,反之亦然的示例。
package main
import "fmt"
func main() {
type S struct{ s string }
st := S{"address of server"}
fmt.Printf("%T %v\n", st, st.s) //main.S test
//convert struct to []byte
sl := []byte(st.s)
fmt.Printf("%T %v\n", sl, sl) //[]uint8 [97 100 ... 114]
//convert []byte to struct
s := fmt.Sprintf("%s", sl)
st2 := S{s}
fmt.Printf("%T %v\n", st2, st2.s) //main.S test
}
答案 4 :(得分:0)
DumpResponse
软件包中的 net/http/httputil
函数可能会有用。
https://pkg.go.dev/net/http/httputil#example-DumpResponse
文档提供了一个示例。