我运行下面的代码workingDir, _ := os.Getwd()
中的server.go文件,该文件是根项目下,并得到根路径,现在我需要将移动server.go文件到以下结构
myapp
src
server.go
Run Code Online (Sandbox Code Playgroud)
我想GE的路径go/src/myapp
目前之后我动server.go下myapp->src>server.go我的路go/src/myapp/src/server.go,我想要得到的预览路径,
我应该如何自动进行?或者我应该../明确在get路径?
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 项目主路径,无论你在子路径中的任何位置