首页 程序笔记 Golang相对路径与绝对路径不一致

Golang相对路径与绝对路径不一致

你遇到过 go run main.go 或go build main.go 获取到的路径不一样的问题吗?

Go程序的两种执行方式

第一种使用go run xx.go,常用于本地开发

第二种使用go build xx.go 常用于生产环境,通过此命令构建成二进制文件然后上传到服务器再执行

两种方式下带来的问题

使用go run 命令执行

func getCurrentAbPathByExecutable() string {
	exePath, err := os.Executable()
	if err != nil {
		fmt.Print(err)
	}
	res, _ := filepath.EvalSymlinks(filepath.Dir(exePath))
	return res
}
func main() {
	curPath := getCurrentAbPathByExecutable()
	fmt.Println(curPath)
}
// go run main.go 输出
// tmp/go-build4104269073/b001/exe

使用go build 命令执行

func getCurrentAbPathByExecutable() string {
	exePath, err := os.Executable()
	if err != nil {
		fmt.Print(err)
	}
	res, _ := filepath.EvalSymlinks(filepath.Dir(exePath))
	return res
}
func main() {
	curPath := getCurrentAbPathByExecutable()
	fmt.Println(curPath)
}
// go build main.go 输出
// /opt/go_code/demo/path

可以看出,这两种不同的方式生成的路径 是不同的

产生不同路径的原因

这是由于go run会将源代码编译到系统TEMP或TMP环境变量目录中并启动执行;而go build只会在当前目录编译出可执行文件,并不会自动执行。

解决办法

使用 runtime.caller(0)来解决

func getCurrentAbPathByExecutable() string {
     var absPath string
     _, file, _, ok := runtime.Caller(0)
     if ok {
         absPath = path.Dir(file)
     }
     return absPath
 }
 func main() {
     curPath := getCurrentAbPathByExecutable()
     fmt.Println(curPath)
 }

这样写的话,无论执行go run xx.go 或者 go build xx.go 返回的路径 都是一样的

1

站心网

你遇到过 go run main.go 或go build main.go 获取到的路径不一样的问题吗? Go程序的两种执行方式 第一种..

为您推荐

解决.NET JAVA PHP中写入及读取memcache中数据不一致的方法

解决.NET JAVA PHP中写入及读取memcache中数据不一致的方法。公司部分接口使用PHP开发,部分接口使用.NET开放,.NET使用redis,PHP使用memcache作为分布式缓存服务器,但是部分业务需要.NET读取memcache里的数据。m..

C#设置Cookie的路径和过期时间

在 C# 中设置 Cookie 的路径和过期时间,你可以使用 HttpCookie 对象的 Path 属性和 Expires 属性来完成。以下是一个设置路径和过期时间的示例:HttpCookie cookie = new HttpCookie("MyCookieName", "cookieValue")..

TinyMCE上传图片文件路径变为相对路径的解决方法

使用TinyMCE上传图片文件,接口返回相对根目录的地址,但是在TinyMCE编辑器源文件里路径变成了../../路径。看上去是编辑器检测出当前编辑页面不在根目录所以自动转成相对路径了,但是这样在实际显示的页面可能路径就..

.net core md5加密与php不一致

MD5 是一种哈希算法,它是不依赖于编程语言或平台的。因此,无论你是在 .NET Core 还是在 PHP 中使用 MD5 哈希算法,结果应该是一致的。.net core md5加密与php不一致的原因如果在 .NET Core 和 PHP 中使用相同的输..

在分布式系统中,如何实现数据一致性和可靠性?

在分布式系统中实现数据一致性和可靠性是一项重要的任务,以下是我在.NET分布式系统开发中的一些实践经验:使用分布式事务:在涉及多个数据源或服务的操作中,使用分布式事务可以确保数据的一致性。在.NET中,可以使..

React路径不变location.search参数改变不触发useEffect

React项目里有两个菜单项会到同一个pathname但是参数不同,这两个页面切换时不会触发页面数据刷新(切换url页面代码不会重新执行)。原来的做法是用window.location.search获取参数,在别的地方都没有问题,这里比较..

.net core md5加密与java不一致

MD5是一种哈希函数,用于将输入数据映射为固定长度的哈希值。在理论上,无论使用哪种编程语言,对相同的输入数据进行MD5哈希,应该得到相同的结果。然而,如果你发现在.NET Core和Java中使用MD5加密得到的结果不一致..

js设置cookie默认路径

在 JavaScript 中,设置 cookie 的默认路径是通过 document.cookie 属性的 path 参数来实现的。path 参数是可选的,默认值是当前页面的路径。例如,以下代码将设置一个名为 username 的 cookie,值为 John Doe,路径..

解决Mysql排序规则不一致问题

报错信息Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='报错原因collation不兼容,一个是 utf8mb4_0900_ai_ci,另一个是utf8mb4_general_c..

快速获取文件夹中文件名路径并保存到TXT文本

第一步打开文件夹第二步全选图片第三步复制图片路径第三步创建txt文本粘贴即可

独立页管理生成静态后的图片路径错误问题

打开Inc/function.inc.php搜索 https://putishu.wang/upload_files替换成 $webdb[www_url]/$webdb[updir]

单篇文章独立页面管理生成静态后的图片路径错误问题

V7,在单篇文章独立页面管理发布图片,生成静态页后,图片链接是错误这个问题大家没遇到吗?

齐博V7修改栏目绝对地址

打开class.inc.php查找fid=修改成$webdb[www_url]/$fid即可

发表回复

返回顶部