Go File.Readdir()可以';你不会被多次打电话吗?

Go File.Readdir()可以';你不会被多次打电话吗?,go,Go,当我学习Golang时,我编写了以下代码: list1,_ := f.Readdir(-1) len(list1) //some value list2,_ := f.Readdir(-1) len(list2) //0 当os.File的方法Readdir()多次调用时,它将始终返回空的[]FileInfo 我想知道为什么?如何使我的代码工作?根据Golang规范: 如果n>0,Readdir最多返回n个FileInfo结构。在这种情况下,, 如果Readdir返回一个空切片,它将返回一个

当我学习Golang时,我编写了以下代码:

list1,_ := f.Readdir(-1)
len(list1) //some value

list2,_ := f.Readdir(-1)
len(list2) //0
当os.File的方法Readdir()多次调用时,它将始终返回空的[]FileInfo


我想知道为什么?如何使我的代码工作?

根据Golang规范:

如果n>0,Readdir最多返回n个FileInfo结构。在这种情况下,, 如果Readdir返回一个空切片,它将返回一个非nil错误 解释原因。在目录的末尾,错误是io.EOF

它返回为空,因为您已到达文件结尾
EOF
。如果要再次读取同一文件。您应该将指针移到文件的开头以再次读取它

list1,_ := f.Readdir(-1)
len(list1) //some value

if _, err := f.Seek(0, 0); err != nil { // seek to the start of the file
    panic(err)
}

list2,_ := f.Readdir(-1)
len(list2) // will not return 0
查找文件指针很容易:

func (f *File) Seek(offset int64, whence int) (ret int64, err error)
Seek将下一次读取或写入文件的偏移量设置为偏移量, 根据何处解释:0表示相对于 文件,1表示相对于当前偏移,2表示相对于当前偏移 结束。它返回新的偏移量和错误(如果有)


“对同一文件的后续调用将产生更多的FileInfos。[…]如果n@robx是一个exmaple,请让我将其设置为
0
偏移量以查找指向文件开头的指针。通过提供可读代码来树立一个好的示例。写入
io.SeekStart
,而不是
0
,以获取
从何处
值: