Go 在尝试解组从文件读取的字符串时,接收到一个没有错误的空映射(回答:解组到数据结构本身)
我有一个文件“test.txt”,包含以下数据。此文件是使用封送处理从下面代码的相同结构创建的Go 在尝试解组从文件读取的字符串时,接收到一个没有错误的空映射(回答:解组到数据结构本身),go,text-files,unmarshalling,Go,Text Files,Unmarshalling,我有一个文件“test.txt”,包含以下数据。此文件是使用封送处理从下面代码的相同结构创建的 {"VLETXGJM":{"attrib1":"test1","attrib2":"test2"}} 我试图从文件中读回它,并使用相同的结构将其解组到地图中。我可以成功地从文件中读取数据。当我试图将其解组到地图中时,没有收到任何错误。然而,我的地图是空的 互斥锁用于保护映射,因为我的实际实现(这是一个提取的测试)需要使用受保护的映射来实现并发性。我尝试过同样的代码删除同步库,但收到同样的负面结果 测
{"VLETXGJM":{"attrib1":"test1","attrib2":"test2"}}
我试图从文件中读回它,并使用相同的结构将其解组到地图中。我可以成功地从文件中读取数据。当我试图将其解组到地图中时,没有收到任何错误。然而,我的地图是空的
互斥锁用于保护映射,因为我的实际实现(这是一个提取的测试)需要使用受保护的映射来实现并发性。我尝试过同样的代码删除同步库,但收到同样的负面结果
测试代码:
package main
import (
"encoding/json"
"fmt"
"sync"
"os"
)
type TestObject struct {
Attrib1 string `json:"attrib1"`
Attrib2 string `json:"attrib2"`
}
type TestMap map[string]TestObject
type TestList struct {
sync.RWMutex
list TestMap
}
func main() {
tl := TestList{ list: make(TestMap) }
// Read the list back out of the file
fi, err := os.Open("test.txt")
if os.IsNotExist(err) {
fmt.Println("data file does not exist")
panic(nil)
}
if err != nil {
panic(err)
}
defer func() {
if err := fi.Close(); err != nil {
panic(err)
}
}()
data := make([]byte, 1024 * 1024)
count, err := fi.Read(data)
if err != nil {
panic(err)
}
fmt.Printf("read from file: \"%s\"\n",data[:count])
tl.Lock()
err = json.Unmarshal(data[:count], &tl)
if err != nil {
panic(err)
}
tl.Unlock()
// List it out
tl.Lock()
if len(tl.list) == 0 {
fmt.Println("Empty list")
} else {
for key, _ := range tl.list {
fmt.Printf("%s: %s\n", tl.list[key].Attrib1, tl.list[key].Attrib2)
}
}
tl.Unlock()
}
运行的输出为:
read from file: "{"VLETXGJM":{"attrib1":"test1","attrib2":"test2"}}"
Empty list
谢谢你的帮助。我已经搜索了类似的问题,但还没有找到与此场景完全相同的问题。我认为您希望将其解组到
tl.list
而不是tl
:
err = json.Unmarshal(data[:count], &tl.list)
tl
没有导出字段,因此Unmarshal
到tl
中不会执行任何操作tl.list
(即键入TestMap
)与您的数据相匹配。我认为您希望解组到tl.list
,而不是tl
:
err = json.Unmarshal(data[:count], &tl.list)
tl
没有导出字段,因此Unmarshal
到tl
中不会执行任何操作tl.list
(即键入TestMap
)与您的数据匹配。谢谢,安迪。这正是问题所在。谢谢你的帮助和教育。谢谢你,安迪。这正是问题所在。谢谢你的帮助和教育。