gpt4 book ai didi

go - 从具有不同调用方的相对路径读取文件

转载 作者:数据小太阳 更新时间:2023-10-29 03:13:39 25 4
gpt4 key购买 nike

我正在尝试读取项目目录中的文件。

我的问题是,根据调用者的不同,路径会发生变化。调用者改变了,因为我想对这段代码进行单元测试,而调用者不再是 Main.go

这是我的项目结构:

Project Structure

我尝试从中访问 specialChars.txt 的代码如下所示:

func RemoveSpecialChars(word string) string {
file, err := ioutil.ReadFile("wordlists/specialChars.txt")
[...]
}

此代码适用于从 Main.go 开始,但不适用于从 CleanupUtil_test.go 开始。为了让它在测试中正常工作,我需要 file, err := ioutil.ReadFile("../wordlists/specialChars.txt")

我找到了这样的答案:https://stackoverflow.com/a/32163888/2837489_, filename, _, ok := runtime.Caller(0) 这显然也依赖于调用者。

是否可以独立于调用函数获取项目根路径?还是我的代码设计有误?我应该将文件路径传递给函数吗?

最佳答案

从 Go 1.16 开始,您可以使用 embed包裹。这允许您将文件嵌入到正在运行的 go 程序中。它带有一个警告,即引用的目录需要存在于嵌入文件中或嵌入文件下方。在您的情况下,结构如下所示:

-- main.go
-- cleanup
-- wordlist
\- specialChars.txt
CleanupUtil.go
CleanupUtil_test.go

您可以使用 go 指令引用该文件

// CleanupUtil.go
package cleanup

import (
"embed"
)

//go:embed wordlists/specialChars.txt
var content embed.FS

func RemoveSpecialChars(word string) string {
file, err := content.ReadFile("wordlists/specialChars.txt")
[...]
}

这个程序不管在什么地方执行都会成功运行。您应该能够在 main.go 文件和 CleanupUtil_test.go 文件中引用此代码。

关于go - 从具有不同调用方的相对路径读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43887759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com