在Go项目中访问静态文件

问题描述 投票:-2回答:1

我有一个围棋项目 ~/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/filepathconfig 包来访问 .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"

好像路径是从我调用二进制文件的地方引用的,而不是二进制文件所在的地方。

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

go environment-variables environment
1个回答
0
投票

好像路径是从我调用二进制文件的地方引用的,而不是二进制文件所在的地方。

当然是这样的。这就是计算机和文件路径的工作方式。

在你的程序中添加一个命令行标志或环境变量,让你设置静态文件的路径。注意,在围棋二进制文件中是绝对不可能找到源文件夹的)。

© www.soinside.com 2019 - 2024. All rights reserved.