
在 go 中,可通过 `os.getwd()` 函数安全、高效地获取程序启动时所在的当前工作目录(cwd),该函数返回路径字符串和可能的错误,是标准库中推荐的标准做法。
Go 标准库的 os 包提供了 os.Getwd() 函数(全称 Get Working Directory),用于以跨平台方式获取进程当前工作目录。该函数返回两个值:一个表示绝对路径的 string 和一个 error 类型。由于工作目录可能因权限不足、路径被删除或文件系统异常而不可访问,忽略错误是不安全的实践,生产代码中应始终检查错误。
以下是一个健壮、可直接运行的示例:
package main
import (
"fmt"
"os"
)
func main() {
wd, err := os.Getwd()
if err != nil {
fmt.Fprintf(os.Stderr, "无法获取当前工作目录: %v\n", err)
os.Exit(1)
}
fmt.Printf("当前工作目录: %s\n", wd)
}✅ 关键说明:
- os.Getwd() 返回的是启动时的进程工作目录,不受后续 os.Chdir() 调用影响(除非显式修改);
- 路径为绝对路径(如 /home/user/project 或 C:\Users\Name\project),无需额外解析;
- 该函数线程安全,可在任意 goroutine 中调用;
- 不依赖环境变量(如 PWD),避免被用户篡改导致的安全风险。
⚠️ 注意事项:
- 切勿使用 _ 忽略 err(如 wd, _ := os.Getwd()),这会掩盖真实错误(例如容器中挂载点失效、Windows 权限拒绝等);
- 若需获取可执行文件所在目录(而非工作目录),应使用 os.Executable() 配合 filepath.Dir();
- 在测试中如需控制工作目录,可使用 os.Chdir() 搭配 t.Cleanup() 还原,或直接使用 filepath.Join(os.TempDir(), "test") 构造临时路径。
掌握 os.Getwd() 是编写可靠 Go 工具链、配置加载器和文件操作程序的基础能力之一。










