在 Go 项目中访问静态文件

我有一个 ~/go/src/project-folder具有以下结构的项目


.

+--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

我使用包path/filepath中的go包config来访问.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

}

应用程序/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"


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


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



当年话下
浏览 156回答 1
1回答

慕哥9229398

似乎路径是从我调用二进制文件的位置而不是二进制文件所在的位置引用的。当然是。这就是计算机和文件路径的工作方式。将命令行标志或环境变量添加到您的程序中,以便您设置静态文件的路径。(请注意,绝对不可能在 Go 二进制文件中找到源文件夹。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go