Go获取项目根目录

场景

项目根目录存在一个config文件夹,其中包含config.go和config.json

config.go中需要读取config.json文件内容,反序列化到结构体

这时最好的做法就是获取这个config.json文件的绝对路径,避免运行测试出现找不到文件的错误

三种方式

package config

import (
	"fmt"
	"os"
	"runtime"
)

func Init() {
	// 第一种
	// 输出的是运行可执行文件时的目录
	// 比如当前项目可执行文件位置是D:\dev\project\golang\go-demo\go-demo.exe
	// 在D:\dev\project\golang\go-demo\目录下执行go-demo.exe,获取的是D:\dev\project\golang\go-demo
	// 而在D:\dev\project\golang\下执行go-demo\go-demo.exe,获取的是D:\dev\project\golang\
	dir, err := os.Getwd() 
	if err != nil {
		panic(err)
	}
	fmt.Println("config wd", dir)
	
	// 第二种
	// 这种方式在使用go run, Goland点击运行,得到的是临时目录
	// 在开发时很不方便
	arg0 := os.Args[0] 
	fmt.Println("config arg0", arg0)
	
	// 第三种
	// 这种就比较稳定通用
	// 固定为当前的文件,可以通过两次path.Dir获得项目根目录
	_, file, _, _ := runtime.Caller(0) 
	fmt.Println("runtime", file)
}

测试

执行根目录下可执行文件

config wd D:\dev\project\golang\go-demo
config arg0 C:\Users\yimin\AppData\Local\JetBrains\GoLand2024.1\tmp\GoLand\___go_build_go_demo.exe
runtime D:/dev/project/golang/go-demo/config/config.go

执行config文件夹下的config_test.go中的Test方法

config wd D:\dev\project\golang\go-demo\config
config arg0 C:\Users\yimin\AppData\Local\JetBrains\GoLand2024.1\tmp\GoLand\___TestDir_in_go_demo_config.test.exe
runtime D:/dev/project/golang/go-demo/config/config.go

比较两次输出,通过runtime.Caller获取的路径保持不变

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值