【问题标题】:Accessing Static Files In Go Project在 Go 项目中访问静态文件
【发布时间】:2020-10-02 05:22:26
【问题描述】:

我在 ~/go/src/project-folder 有一个 go 项目,结构如下

.
+--app
   +--main.go
   +--main (binary)
+--config
   +--config.go
+--.env

config 包使用github.com/joho/godotenv 包来加载.env 文件并在main.go 中调用以访问某些数据(例如运行我的网络服务器的端口)。

如果我 cd 进入 app 文件夹并运行 ./main 项目按预期工作,但如果我在我的主目录中运行

~/go/src/project-folder/app/main

我明白了

open /.env: no such file or directoryError

我使用config包中的go包path/filepath来访问.env文件。

这是配置包中读取.env文件的代码 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
}

app/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"

似乎路径是从我调用二进制文件的位置而不是二进制文件所在的位置引用的。

有没有办法确保路径是相对于二进制文件所在的位置而不是它被调用的位置?

【问题讨论】:

  • 尝试从根文件夹而不是包含 main.go 的文件夹运行代码
  • @kofoworola 仍然解决了no such file 错误
  • 你能把你设置文件夹路径的代码贴出来吗?
  • 你的 GOPATH 是什么?
  • @AshwinShirva 我的 GOPATH 是 GOPATH="/home/fanan/go"

标签: go environment-variables environment


【解决方案1】:

似乎路径是从我调用二进制文件的位置引用的,而不是二进制文件所在的位置。

当然是。这就是计算机和文件路径的工作原理。

向您的程序添加命令行标志或环境变量,以便您设置静态文件的路径。 (请注意,绝对不可能在 Go 二进制文件中找到源文件夹。)

【讨论】:

  • @FananDala 请注意,这是 100% 的重复。
  • 请分享原始问题的链接
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 2014-11-23
相关资源
最近更新 更多