我在~/go/src/project-folder
中有一个具有以下结构的go项目
.
+--app
+--main.go
+--main (binary)
+--config
+--config.go
+--.env
config包使用
github.com/joho/godotenv
包加载.env
文件,并在main.go
中调用以访问某些数据(例如在PORT上运行我的Web服务器)。如果我将
cd
放入app
文件夹并运行./main
,则该项目将按预期工作,但是如果我在我的主目录中并运行~/go/src/project-folder/app/main
我懂了
open /.env: no such file or directoryError
我使用
path/filepath
包中的go包config
来访问.env
文件。这是读取
.env
文件的config包中的代码config / config.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
}
应用程序/main.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)
}
}
GOPATH
GOPATH="/home/fanan/go"
似乎是从我调用二进制文件的位置而不是二进制文件所在的位置引用了路径。
有没有办法确保该路径是相对于二进制文件所在的位置,而不是相对于二进制文件的调用位置?
最佳答案
似乎是从我调用二进制文件的位置而不是二进制文件所在的位置引用了路径。
当然是这样。这就是计算机和文件路径的工作方式。
在程序中添加命令行标志或环境变量,以使您可以设置静态文件的路径。 (请注意,绝对不可能在Go二进制文件中找到源文件夹。)
关于go - 在Go项目中访问静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62343478/