情况:
我正在尝试将文件写入目录,如下所示:
func (p *Page) Save() error {
filepath := DerivePath(p.Title)
fmt.Println(filepath)
content, _ := json.MarshalIndent(p, "", " ")
err := ioutil.WriteFile(filepath, content, 0600)
return err
}
问题:
第5行出现以下错误:
open data / Testpage.json:系统找不到指定的路径。
os.Create
之前尝试创建该文件,但它也不起作用。data
目录加载工作正常。只有将 new 文件写入目录才会失败。其他信息:
我的项目结构如下:
│ .gitignore
│ .project
│
├───bin
│ main.exe
│
├───data
│ Welcome.json
│
├───pkg
│ └───windows_amd64
│ page.a
│
├───src
│ ├───main
│ │ main.go
│ │
│ └───page
│ page.go
│ page_test.go
│
└───templates
view.html
如上所述,阅读 data/Welcome.json
工作正常(使用io/ioutils.ReadFile
)。
该来源位于https://gitlab.com/thyaris/Wiki。
执行D:\GitWorkspaces\Wiki\wiki>go test -v page
写入以下输出:
=== RUN TestSave
data/Testpage.json
--- FAIL: TestSave (0.00s)
page_test.go:15: open data/Testpage.json: The system cannot find the path specified.
page_test.go:19: 'Testpage.json' was not created
=== RUN TestLoadPage
--- FAIL: TestLoadPage (0.00s)
page_test.go:26: Error while loading
page_test.go:32: File content did not match
=== RUN TestDelete
--- PASS: TestDelete (0.00s)
FAIL
exit status 1
FAIL page 0.094s
答案 0 :(得分:2)
这里的问题是测试引擎没有运行您期望的工作目录的可执行文件。它不是使用shell或IDE定义的工作目录,而是将其设置为要测试的代码的源目录。 (很久以前我曾经咬过我一次:)我几乎忘了那个......)
简单的解决方案是更改DerivePath
,以便您可以在外部设置前缀,然后将其更改为测试开始时所需的路径。当然还有其他(可能更好的?)解决方案。