go - 在Go项目中访问静态文件

标签 go environment-variables environment

我在~/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/

相关文章:

go - 将 rsa.PublicKey 转换为 ssh.PublicKey

Python:并非所有环境变量都存在于 os.environ 中

ruby-on-rails - 为我的 Rails 应用程序创建自定义配置选项的最佳方式?

r - assign( ... , envir = ... ) 和 environment( ... ) = 之间的区别

go - 这个 mmap 系统调用有什么问题?

go - 无法读取 UDP 回复(golang)

go - 如何延迟直播?

c - 如何通过用 C 编写的 cgi-bin 程序检索表单 "POST"数据

java/javac -version 命令响应没有任何内容

c++ - 信任注册表项或环境变量