简介

在 Go 程序执行的时候,有些配置是相对路径的,需要到指定的目录执行才能找到对应的配置文件。这时候就需要程序自动切换工作目录。

init 函数

在 golang 中在加载包的时候会先加载 init 函数,我们可以通过这个函数来实现。

代码

package mainimport ("fmt""log""os""path/filepath")// 自动切换工作目录func init() {pwd, _ := os.Getwd()fmt.Println("开始工作目录", pwd)// 程序所在目录execDir, err := filepath.Abs(filepath.Dir(os.Args[0]))if err != nil {log.Fatal(err)}if pwd == execDir {fmt.Println("不需要切换工作目录")return}fmt.Println("切换工作目录到", execDir)if err := os.Chdir(execDir); err != nil {log.Fatal(err)}pwd, _ = os.Getwd()fmt.Println("切换后工作目录:", pwd)}func main() {}

总结

main 函数里面保留之前函数即可。也可以将这个 init 函数放到其他包里面去,然后导入到 main 包。