【发布时间】:2020-02-14 08:06:26
【问题描述】:
我可以获取当前目录和当前.go 文件的名称,但是如果我从带有go build 的文件构建.exe,那么我仍然会得到.go 名称。
.../Project/Test/testfile.go
在使用go build 构建testfile.go 之后,我有这些:
1) .../Project/Test/testfile.go
2) .../Project/Test/main.exe
当我执行 main.exe 时,我得到 testfile 但我想在执行 main.exe 后得到 main 名称
package main
import (
"errors"
"fmt"
"path/filepath"
"runtime"
"strings"
)
func GetFileName() string {
_, fpath, _, ok := runtime.Caller(0)
if !ok {
err := errors.New("failed to get filename")
panic(err)
}
filename := filepath.Base(fpath)
filename = strings.Replace(filename, ".go", "", 1)
return filename
}
func main() {
fmt.Print(GetFileName())
}
【问题讨论】:
-
可以使用
os.Args[0]获取可执行文件名 -
@CanobbioE 抱歉不知道这么简单。你可以写一个答案,所以我把它标记为已解决
-
另见os.Executable。 Args 可能不是您想要的,但由于您没有告诉我们您真正想要什么,我们不能推荐其中一个。
-
@Peter 我想在任何情况下都获得“可执行”名称。有或没有参数或任何路径。我也认为 args[0] 总是包含 c# 中的可执行文件名称。你有什么更好的推荐吗?
标签: go path filenames getmodulefilename