章节

14.2 获取当前源码文件路径

本篇学习 runtime.Caller 获取当前 Go 源码文件路径,并能区分源码路径与程序运行目录。

获取当前源码文件路径

概念说明

runtime.Caller 可以获取调用栈中的文件名、行号等信息。
它常用于调试、日志定位或根据源码位置推导相邻资源路径。

需要注意:
源码文件路径不等于程序运行目录。运行目录通常用 os.Getwd() 获取。

语法/规则

  1. runtime.Caller(0) 表示当前调用位置。
  2. 返回值包含程序计数器、文件路径、行号和是否成功。
  3. 文件路径可能是绝对路径,也可能受编译方式影响。
  4. 如果只想取文件名,可以配合 filepath.Base
  5. 如果想取当前工作目录,应使用 os.Getwd()

获取源码文件名示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package main

import (
	"fmt"
	"path/filepath"
	"runtime"
)

func main() {
	_, file, line, ok := runtime.Caller(0) // 0 表示当前这行代码所在位置
	if !ok {
		panic("caller not found")
	}

	fmt.Println(filepath.Base(file)) // 只取文件名部分
	fmt.Println(line > 0)
}

输出结果:

1
2
main.go
true

常见错误

  1. runtime.Caller 返回的源码路径当成当前运行目录使用。
  2. 忘记检查 ok,在获取失败时继续使用空路径。
  3. 在不同构建环境中依赖完整源码路径,导致路径不稳定。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字