在Go中使用相对文件路径作为函数参数

问题描述 投票:0回答:1

假设我有一个像这样的文件夹结构:

src/
- main.go
data/
- example.csv
csv/
- parse.go
utils/
- mapFields.go

mapFields 函数接受输入和输出 csv 文件作为参数:

MapFields(csvInPath string, csvOutPath string) {...}

我希望能够使用相对文件路径从任何 .go 文件调用此 mapFields 函数。例如,来自 main.go:

MapFields("../data/example.csv", "../data/output.csv")

我无法弄清楚如何确保 MapFields 使用从调用函数的文件路径创建的路径与 csv 的相对路径连接来打开 csv。

我已经使用this堆栈溢出帖子实现了一个解决方案,以获取Node.js中的__dirname的等效项,但没有成功。

如果有任何意见,我将不胜感激。

go path relative-path
1个回答
0
投票

文件路径在当前工作目录的上下文中解析。 这通常是项目的根目录。 您可以使用

os.Getwd()
检查当前目录是什么。

func main() {
    if workingDirectory, err := os.Getwd(); err != nil {
        panic(fmt.Sprintf("cennot get working direcory - %s", err))
    } else {
        fmt.Printf("Working direcory is %s", workingDirectory)
    }
}

为了获得更大的灵活性,请考虑使用环境变量来指示 csv 文件的根目录。 如果未设置环境变量,请使用

filepath.Join(".", "data")

© www.soinside.com 2019 - 2024. All rights reserved.