Go:为什么os.Getwd()有时会因EOF而失败

时间:2012-11-28 20:44:36

标签: go

package main
import "os"
import "fmt"

func main() {
    _, err := os.Getwd()
    if err != nil {
        fmt.Println(err)
    }
}

这有时会打印出EOF错误。有谁知道为什么?通常会发生一些os.Chdir,但这并没有错误。

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"

go version go1.0.3

1 个答案:

答案 0 :(得分:1)

这是os.Getwd中的一个错误,导致它在不支持getwd系统调用的平台上,当工作目录不再存在时将EOF返回为错误。这是OS X上可重复的测试用例。

package main
import "os"
import "fmt"

const DIR = "/tmp/somedir"

func main() {
    os.Remove(DIR)
    if err := os.Mkdir(DIR, 0755); err != nil {
      fmt.Println(err)
      return
    }
    if err := os.Chdir(DIR); err != nil {
      fmt.Println(err)
      return
    }
    if err := os.Remove(DIR); err != nil {
      fmt.Println(err)
      return
    }
    wd, err := os.Getwd()
    fmt.Println("err:", err)
    fmt.Println("wd:", wd)
}

输出:

err: EOF
wd: