在 golang 中将结构转换为字节数据,反之亦然

sus*_*ary 4 go

我正在编写一个 Go 程序,其中我只是使用 - 从服务器获取响应

tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
client := &http.Client{Transport: tr}
link := "address of server"
resp, err := client.Get(link)
Run Code Online (Sandbox Code Playgroud)

现在我需要将 resp 转换为字节,以便我可以将其传递给某个函数,而另一端可以将其解码为相同的结构。resp 是 http 包中定义的 http.Response 类型的结构,我无法更改。

我想直接将其转换为字节。

golang中是否有我可以直接使用的此类函数,或者是否有任何方法可以执行相同的操作。

Top*_*opo 6

您想使用go 库中的编码包。通常我喜欢 JSON 编码,因为它非常易于阅读,但该包支持多种格式之间的编码,包括二进制和gob,这是一种专为您想要执行的操作而设计的格式。

go文档中编码为 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)
}
Run Code Online (Sandbox Code Playgroud)

go文档中从 json 进行解码的示例:

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)
}
Run Code Online (Sandbox Code Playgroud)