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)