【发布时间】:2012-11-28 20:44:35
【问题描述】:
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
【问题讨论】:
-
请添加 Go 版本/操作系统平台/CPU 架构信息,如果可能的话,添加一个最小的程序来重现。
-
只是猜测,因为我从来没有遇到过这种情况。但是,chdir 是否有可能移动到权限不正确的目录,因此尝试获取当前目录会因为不可读而失败?
-
你能重复测试吗?这次不是正常打印错误,而是使用
fmt.Printf("%v | %T | %#v\n", err, err, err)。 -
os.Getwd()返回string, error所以示例无法编译:golang.org/pkg/os/#Getwd -
我的猜测是它是相当可怕的 getwd 代码中的一个错误:golang.org/src/pkg/os/getwd.go 从我的 grepping 中 OSX 没有将 getwd 实现为系统调用,因此它使用上面的后备实现。我没有mac,否则我会去调试它!唯一可以返回 EOF 的地方是来自
fd.Readdirnames(100),这可能意味着当前目录已被删除或发生了其他奇怪的事情。
标签: go