如何获取项目的根路径

6 path go

我运行下面的代码workingDir, _ := os.Getwd() 中的server.go文件,该文件是根项目下,并得到根路径,现在我需要将移动server.go文件到以下结构

myapp
  src
   server.go
Run Code Online (Sandbox Code Playgroud)

我想GE的路径go/src/myapp 目前之后我动server.gomyapp->src>server.go我的路go/src/myapp/src/server.go,我想要得到的预览路径,

我应该如何自动进行?或者我应该../明确在get路径?

Arm*_*ani 8

os.Getwd()不会返回您的源文件路径.它返回程序当前工作目录(通常是您执行程序的目录).

例:

假设我有一个main.go /Users/Arman/go/src/github.com/rmaan/project/main.go只是输出os.Getwd()

$ cd /Users/Arman/go/src/github.com/rmaan/project/
$ go run main.go
/Users/Arman/go/src/github.com/rmaan/project <nil>
Run Code Online (Sandbox Code Playgroud)

如果我切换到其他目录并在那里执行,结果将会改变.

$ cd /Users/Arman/
$ go run ./go/src/github.com/rmaan/project/main.go
/Users/Arman <nil>
Run Code Online (Sandbox Code Playgroud)

IMO你应该明确地将你想要的路径传递给你的程序,而不是试图从上下文推断它(因为它可能在生产环境中特别改变).这是一个flag包的例子.

package main

import (
    "fmt"
    "flag"
)


func main() {
    var myPath string
    flag.StringVar(&myPath, "my-path", "/", "Provide project path as an absolute path")
    flag.Parse()

    fmt.Printf("provided path was %s\n", myPath)
}
Run Code Online (Sandbox Code Playgroud)

然后执行您的程序如下:

$ cd /Users/Arman/go/src/github.com/rmaan/project/
$ go run main.go  --my-path /Users/Arman/go/src/github.com/rmaan/project/
provided path was /Users/Arman/go/src/github.com/rmaan/project/
$ # or more easily
$ go run main.go  --my-path `pwd`
provided path was /Users/Arman/go/src/github.com/rmaan/project/
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您的项目是 git 存储库,您还可以使用git rev-parse带有以下命令的命令--show-toplevel

cmdOut, err := exec.Command("git", "rev-parse", "--show-toplevel").Output()
if err != nil {
    assert.Fail(t, fmt.Sprintf(`Error on getting the go-kit base path: %s - %s`, err.Error(), string(cmdOut)))
    return
}

fmt.Println(strings.TrimSpace(string(cmdOut)))
Run Code Online (Sandbox Code Playgroud)

它会打印出 git 项目主路径,无论你在子路径中的任何位置