我正在使用 go 创建一个命令行实用程序,它将向特定服务器请求数据,并以 JSON 响应从服务器获取数据。实用程序可以对多个产品执行多个请求。我能够执行多个请求并以 JSON 格式正确获取每个产品的响应。现在,我想将结果保存在本地缓存或本地文件中。通过它,在每个请求上,我都会在向服务器发送请求之前检查本地缓存。如果该产品的数据可用,则不会发送任何请求。
我想将整个 json 响应保存在缓存或本地文件中,并在每次向服务器发送数据请求之前保留该数据。
用例:产品 {"A","B","C","D","E"} 可以是任意数量的产品测试 1:获取 A、B、C 的数据检查本地存储是否有可用数据或做请求。将每个产品的 json 请求保存在存储中。
因此,对于测试 1 ,它将具有如下条目: [{测试 1 : [{产品 a : json 响应} , {产品 b : json 响应} ,{产品 c : json 响应}]}]
如果测试在中间失败并且得到两个产品的结果,它应该保存 2 个产品的响应,如果我们重新运行测试,它只会得到第三个产品的结果。
当我尝试map[mapKey]string使用gob编码器将类型映射保存到文件中时,它不会将字符串保存在文件中。
这mapKey是结构体,映射值是长 json 字符串。
type mapKey struct{
Id1 string
Id2 string
}
Run Code Online (Sandbox Code Playgroud)
每当我使用嵌套映射而不是像这样的结构时:
var m = make(map[string]map[string]string)
Run Code Online (Sandbox Code Playgroud)
它工作正常并正确保存字符串。我不确定我在这里缺少什么。
编码,解码并将其保存在文件中的代码:
func Save(path string, object interface{}) error {
file, err := os.Create(path)
if err == nil {
encoder := gob.NewEncoder(file)
encoder.Encode(object)
}
file.Close()
return err
}
// Decode Gob file
func Load(path string, object interface{}) error {
file, err := os.Open(path)
if err == nil {
decoder := gob.NewDecoder(file)
err = decoder.Decode(object)
}
file.Close()
return err …Run Code Online (Sandbox Code Playgroud)