Go项目结构
Structure of Go project
我的程序使用了几个文件,如 *.json、*.db
我应该如何放置它们?第一个变体:
project
|-> src
|-> main
| main.go
| main_test.go
|-> data
| database.db
|-> config
| config.go
|-> data
| config.json
...
或者:
project
|-> src
|-> main
| main.go
| main_test.go
|-> config
| config.go
...
|-> data
| database.db
| config.json
我更喜欢第二种变体,但是在尝试编写测试时遇到了麻烦。我尝试使用“/absolute/path”,但它不起作用,因为它指向“.../src/main/文件夹。
go test 命令将 working directory 设置为包含包源文件的目录。例如,配置测试是 运行,工作目录设置为 project/src/config
:
使用相对于测试目录的路径:
第一个变体中的测试应该打开这样的文件:
f, err := os.Open("data/config.json")
if err != nil {
// handle error
}
第二个变体中的测试应该打开这样的文件:
f, err := os.Open("../../data/config.json")
if err != nil {
// handle error
}
(这里重点是相对路径,不是用os.Open)
我的程序使用了几个文件,如 *.json、*.db
我应该如何放置它们?第一个变体:
project
|-> src
|-> main
| main.go
| main_test.go
|-> data
| database.db
|-> config
| config.go
|-> data
| config.json
...
或者:
project
|-> src
|-> main
| main.go
| main_test.go
|-> config
| config.go
...
|-> data
| database.db
| config.json
我更喜欢第二种变体,但是在尝试编写测试时遇到了麻烦。我尝试使用“/absolute/path”,但它不起作用,因为它指向“.../src/main/文件夹。
go test 命令将 working directory 设置为包含包源文件的目录。例如,配置测试是 运行,工作目录设置为 project/src/config
:
使用相对于测试目录的路径:
第一个变体中的测试应该打开这样的文件:
f, err := os.Open("data/config.json")
if err != nil {
// handle error
}
第二个变体中的测试应该打开这样的文件:
f, err := os.Open("../../data/config.json")
if err != nil {
// handle error
}
(这里重点是相对路径,不是用os.Open)