
Go 语言中没有直接名为 dirname 的内置函数,但可通过 os.Getwd() 获取当前工作目录的绝对路径,这是 Node.js 中 path.dirname(__dirname) 或 process.cwd() 的标准等效方案。
go 语言中没有直接名为 `dirname` 的内置函数,但可通过 `os.getwd()` 获取当前工作目录的绝对路径,这是 node.js 中 `path.dirname(__dirname)` 或 `process.cwd()` 的标准等效方案。
在 Go 中,获取“当前目录”需明确区分两个常见需求:
- 当前工作目录(Current Working Directory, CWD):即程序启动时所在的目录(类似 Node.js 的 process.cwd());
- 当前源文件所在目录:即 .go 文件所在的路径(类似 Node.js 的 __dirname)。
os.Getwd() 对应前者,是标准库提供的最直接、最常用的方法:
package main
import (
"fmt"
"os"
)
func main() {
dir, err := os.Getwd()
if err != nil {
panic(fmt.Sprintf("failed to get working directory: %v", err))
}
fmt.Println("Current working directory:", dir)
}
⚠️ 注意事项:
- os.Getwd() 返回的是绝对路径,且调用时依赖进程的实际工作目录(可能受 cd 命令或 IDE 启动配置影响);
- 若需获取当前源文件所在目录(例如加载同级配置文件),os.Getwd() 不适用,应结合 runtime.Caller 和 filepath.Dir 实现:
import (
"filepath"
"runtime"
)
func getCurrentFileDir() string {
_, filename, _, _ := runtime.Caller(0)
return filepath.Dir(filename)
}
该方法返回的是当前 .go 文件的绝对路径目录,更贴近 Node.js 中 __dirname 的语义。
✅ 总结:
- ✅ os.Getwd() = Node.js process.cwd() → 推荐用于读取运行时相对路径的资源(如命令行指定的配置路径);
- ✅ filepath.Dir(runtime.Caller(0).Filename) = Node.js __dirname → 推荐用于加载与源码强绑定的资源(如嵌入模板、测试数据);
- ❌ 不要自行拼接字符串解析路径,务必使用 filepath 包处理跨平台路径分隔符(/ vs \)。











