我有一个围棋项目 ~/go/src/project-folder
结构如下
.
+--app
+--main.go
+--main (binary)
+--config
+--config.go
+--.env
配置包使用的是 github.com/joho/godotenv
包来加载 .env
文件,并在 main.go
来访问特定的数据(比如运行我的webserver的PORT)。
如果我 cd
进入 app
文件夹并运行 ./main
该项目可以正常工作,但如果我在比如说我的主目录下,并运行
~/go/src/project-folder/app/main
我得到
open /.env: no such file or directoryError
我使用的是go包 path/filepath
在 config
包来访问 .env
文件。
这是配置包中的代码,它读取了 .env
档案configconfig.go
package config
import (
"github.com/joho/godotenv"
"fmt"
"path/filepath"
)
var env map[string]string
func init() {
envPath,_:= filepath.Abs("../.env");
en, err := godotenv.Read(envPath)
if err != nil {
fmt.Print(err)
}
env = en
}
func ENV() map[string]string {
return env
}
appmain.go
package main
import (
"fmt"
"net/http"
"project/routes"
"project/config"
"project/models"
)
func main() {
router := routes.MakeRouter()
defer models.DB().Close()
err := http.ListenAndServe(":" + config.ENV()["PORT"], router)
if err != nil {
fmt.Print(err)
}
}
GOPATHGOPATH="/home/fanan/go"
好像路径是从我调用二进制文件的地方引用的,而不是二进制文件所在的地方。
有没有办法确保路径是相对于二进制文件所在的地方而不是调用的地方?
好像路径是从我调用二进制文件的地方引用的,而不是二进制文件所在的地方。
当然是这样的。这就是计算机和文件路径的工作方式。
在你的程序中添加一个命令行标志或环境变量,让你设置静态文件的路径。注意,在围棋二进制文件中是绝对不可能找到源文件夹的)。