如果你想存储你的结构为JSON,最简单的方法通常是使用json.Marshal()
,如:
b, err := json.Marshal(&myStruct)
B就在这种情况下是字节片([]字节) 。这可以稍后使用gzip
包进行gzip压缩。例如,为了gzip压缩字节到一个文件,你可以使用:
f, _ := os.Create("/tmp/s.gz")
defer f.Close()
w := gzip.NewWriter(f)
w.Write(b)
w.Close()
如果你愿意,你可以绕过使用json.Encoder.Encode()
,而不是直接创造的字节片。
f, _ := os.Create("/tmp/s.gz")
defer f.Close()
w := gzip.NewWriter(f)
json.NewEncoder(w).Encode(&myStruct)
w.Close()
根据你要存储或发送gzip压缩JSON,您可以替代gzip.NewWriter(f)
曾经是实现io.Writer
任何对象的参数f
。例如,你可以使用http.ResponseWriter
直接在处理器发送gzip压缩的响应:
func MyHandler(w http.ResponseWriter, r *http.Request) {
myStruct := ... // Get struct from somewhere
gz := gzip.NewWriter(w)
json.NewEncoder(gz).Encode(&myStruct)
gz.Close()
}
当使用NewDecoder VS元帅? – Blankman
如果你已经把所有数据都作为'[] byte'',那么我更喜欢使用'json.Marshal'。如果你使用流数据和/或你只需要一个'io.Reader',那么'json.Decoder'就是要走的路。 –