package main import ( "fmt" "os" ) func main() { fmt.Println(os.Executable()) fmt.Println(os.Getwd()) }
zzh@ZZHPC:~/zd/Github/ztest$ go run main.go /tmp/go-build2963213184/b001/exe/main <nil> /home/zzh/zd/Github/ztest <nil>
zzh@ZZHPC:~/zd/Github/ztest$ tree . ├── config │ └── config.go ├── go.mod └── main.go 1 directory, 3 files
package config import ( "fmt" "os" ) func LoadConfig() { fmt.Println(os.Executable()) wd, _ := os.Getwd() fmt.Printf("current directory: %s", wd + "/config") }
package main import ( "ztest/config" ) func main() { config.LoadConfig() }
zzh@ZZHPC:~/zd/Github/ztest$ go run main.go /tmp/go-build3485574147/b001/exe/main <nil> current directory: /home/zzh/zd/Github/ztest/config
os.Getwd()的返回结果依赖于在哪个目录下运行程序,所以如果不知道source file的位置与working directory的关系还是不能根据os.Getwd()的返回值来得到current directory:
func LoadConfig() { wd, _ := os.Getwd() fmt.Printf("working directory: %s\n", wd) }
zzh@ZZHPC:/zdata/Github/greenlight$ go run ./test/api working directory: /zdata/Github/greenlight zzh@ZZHPC:/zdata/Github/greenlight$ cd test/api zzh@ZZHPC:/zdata/Github/greenlight/test/api$ go run main.go working directory: /zdata/Github/greenlight/test/api