2

この関数を使用してディレクトリリストを取得しようとしています。

package main;
import ("fmt"; "os"; "io/ioutil")

func main() {
    dir, _ := ioutil.ReadDir("..")
    var f os.FileInfo
    for f = range dir {
        fmt.Println(f.Name())
    }
}

ReadDirのドキュメントによると[]os.FileInfo、最初の戻りパラメーターとして返されるはずです。しかし、コンパイルしようとすると、

cannot assign type int to f (type os.FileInfo) in range: int does not implement os.FileInfo (missing IsDir method)

私は何が欠けていますか?

4

1 に答える 1

6

これはうまくいくはずです:

for _, f = range dir {
        fmt.Println(f.Name())
    }

インデックスを無視し、dir エントリのみを割り当てます。

必要ない場合は、var を宣言する必要はありません。これも機能します:

func main() {
    dir, _ := ioutil.ReadDir("..")
    for _, f := range dir {
        fmt.Println(f.Name())
    }
}

「 」の代わりに:=「 」の後の「 」に注意してください。_, ff =

問題は何を返すかではなく、(index, value) を返す式にReadDir()由来します。 Go Specs " For Statements " から:range

Range expression                          1st value          2nd value (if 2nd variable is present)

array or slice  a  [n]E, *[n]E, or []E    index    i  int    a[i]       E
于 2012-09-13T11:12:03.753 に答える