基本上,我想要实现的是获取目录的内容,os.ReadDir()然后将结果编码为json.
直接做的事情json.Marshal()没有例外,但给了我一个空洞的结果.
所以我尝试了这个:
func (f *os.FileInfo) MarshalerJSON() ([]byte, error) {
return f.Name(), nil
}
Run Code Online (Sandbox Code Playgroud)
然后Go告诉我这os.FileInfo()是一个接口,不能以这种方式扩展.
最好的方法是什么?
将数据打包到可以序列化的结构中:
http://play.golang.org/p/qDeg2bfik_
type FileInfo struct {
Name string
Size int64
Mode os.FileMode
ModTime time.Time
IsDir bool
}
func main() {
dir, err := os.Open(".")
if err != nil {
log.Fatal(err)
}
entries, err := dir.Readdir(0)
if err != nil {
log.Fatal(err)
}
list := []FileInfo{}
for _, entry := range entries {
f := FileInfo{
Name: entry.Name(),
Size: entry.Size(),
Mode: entry.Mode(),
ModTime: entry.ModTime(),
IsDir: entry.IsDir(),
}
list = append(list, f)
}
output, err := json.Marshal(list)
if err != nil {
log.Fatal(err)
}
log.Println(string(output))
}
Run Code Online (Sandbox Code Playgroud)