自学内容网 自学内容网

20240926 关于Goland处理wsl-GOROOT原理猜测

GOROOT的原理

go sdk与java jdk类似,是go的编译工具链的集合。

在windows上,我们通过在系统环境变量中添加GOROOT并设置为go sdk地址,使得命令行可以访问到go sdk并执行go test、build等命令,这样设置的变量是全局生效的

而在linux中,我们并没有修改系统环境变量,而是安装go后,将go sdk地址写为GOROOT写在/home/user_name/.bashrc中,并export PATH=$PATH;$GOROOT/bin来调用go sdk,这样设置的变量只在bash中生效(重点来了)

GOPATH已经被弃用,影响不是很大。

问题在哪里?

所以,当Goland调用make时,GOROOT实际上并没有定义,而为了弥补这一点,Goland非常“聪明”地将ide保管的GOROOT、GOPATH加入环境变量发送给make,从而使它能调用go sdk。

这样有什么问题呢?这一套在windows上啥问题也没有,甚至可以支持自定义go sdk版本,但是,聪明的读者可能已经发现,这个GOROOT和make看到的GOROOT根本不是一个东西!!!

我们通过在makefile开头打印GOROOT变量来看一下Goland干了什么好事?
请添加图片描述
请添加图片描述

好家伙,他直接把//wslUbuntu给发了过去,这不是三体人和地球人聊科学吗?make直接看不懂了,直接罢工。

解决办法:有,但是极为丑陋

只说结论的话,确实是有的。
步骤:

  1. 右上角齿轮->Go设置->GOROOT->无SDK
  2. 右上角三个点->编辑配置->取消包含系统变量->添加用户环境变量(GOROOT=“/usr/local/go/bin/”)
  3. 在makefile中添加GOLOCAL=$(GOROOT)/go
  4. 使用GOLOCAL进行GO操作

代价:

  1. 正常wsl开发需要设置Go sdk,这下又要重新设置
  2. 正常终端开发需要用这个makefile的话,又要把makefile改回去

官方赶紧把wsl优化端出来!!!


原文地址:https://blog.csdn.net/weixin_46545421/article/details/142564113

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!