Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

xgo 更好的集成 goland vscode 这种 IDE 工具 #205

Open
alpha-baby opened this issue Jun 15, 2024 · 13 comments
Open

xgo 更好的集成 goland vscode 这种 IDE 工具 #205

alpha-baby opened this issue Jun 15, 2024 · 13 comments

Comments

@alpha-baby
Copy link
Contributor

我简单的翻了一下 xgo 的源码,xgo 大概的原理就是:

  1. 使用了 golang compile 的 -toolexec
  2. 重新拷贝了 GOROOT下面的代码到 ~/.xgo/go-instrument/go1.22.1_Us_fu_.x_go_go_go_61604acb (go1.22.1_Us_fu_.x_go_go_go_61604acb 是自动生成的,每个人的电脑应该是不一样的,可以进入到目录 ~/.xgo/go-instrument/ 中去查看)
  3. 然后对 go 的很多源文件打了一些补丁
  4. 然后再重新编译 go 的 compile
  5. 然后再增加和修改了一些 环境变量
  6. 然后再运行 go build 或者 go test 等去编译用户的业务代码

以上的过程可以通过去 debug xgo 的代码去梳理出来,然后也可以执行 xgo 的时候加上参数xgo test --log-debug --debug 打印出详细的日志

goland 中设置配置

目前来说如果你想更友好的在 goland 中使用 xgo ,你可以修改 Settings->GO->GOROOT 修改成 上面 xgo 给你生成出来的 goroot

例如我这里把他改成了:

image

然后再修改 goland 的运行配置(Run/Debug Configurations)

添加环境变量

image

添加编译参数

image

上面截图中的配置都不需要从图中抄过去,而是在命令行中使用下 xgo 去跑一下本地的单测,在跑的时候加上 --log-debug --debug 参数,更多的参数可以通过运行 xgo help 来查看

总结

说实话这样配置一遍挺复杂的,但是在 vscode 中使用 xgo 应该是比较容易的,运维 vscode 中可以自定义编译命令,不详细展开了,如果你已经是使用 vscode 的老手,应该知道我在讲什么。

希望作者重新考虑下怎么在 goland 中更方便快捷的使用 xgo ,如果大家有更好的办法希望留言!

@xhd2015
Copy link
Owner

xhd2015 commented Jun 15, 2024

是的,这个是我们希望解决的问题。目前的做法是运行xgo e来打开一个统一的test管理工具,如下图所示:

xgo e

使用这个工具执行用例的时候,默认以xgo test来执行测试用例

image

IDE的集成,目前还没有特别好的办法。

@alpha-baby
Copy link
Contributor Author

IDE 集成的话,如果是想让用户用起来最爽的就是开发一个 xgo 的 vscode 或者 goland 插件,

我刚刚试了试 xgo e 还是挺好用的,但是看起来这里有个 bug,这个测试完成后并没有在左边显示完成,也没有显示测试失败

image

@xhd2015
Copy link
Owner

xhd2015 commented Jun 15, 2024

目前的做法是运行xgo e来打开一个统一的test管理

感谢反馈,这个问题我之前也有记录:#198

我抽时间修复一下,最近工作上的事情比较忙,没来得及搞。

test-explorer的源码:https://github.com/xhd2015/coverage-visualizer/blob/master/src/mock-editor/TestingExplorer/xgo/XgoTestingExplorer.tsx

@xhd2015
Copy link
Owner

xhd2015 commented Jun 15, 2024

IDE 集成的话,如果是想让用户用起来最爽的就是开发一个 xgo 的 vscode 或者 goland 插件,

关于插件,目前是希望对vscode-go提一个PR,能够支持指定xgo进行测试。
之前ginko也有一个类似issue:onsi/ginkgo#1400

@alpha-baby
Copy link
Contributor Author

IDE 集成的话,如果是想让用户用起来最爽的就是开发一个 xgo 的 vscode 或者 goland 插件,

关于插件,目前是希望对vscode-go提一个PR,能够支持指定xgo进行测试。 之前ginko也有一个类似issue:onsi/ginkgo#1400

想法是比较好的,但是我感觉进 vscode-go 的官方插件是比较难的,因为 ginkgo xgo 这些是第三方开发工具,对于 go 团队来说比较难维护,除非 ginkgo xgo 这些成为了 go 官方的工具。但是我觉得这个更难。我还是觉得自己搞插件这个路子更好走一些。

@xhd2015
Copy link
Owner

xhd2015 commented Jun 15, 2024

也是个方向,可以基于当前xgo的前端代码来做

This was referenced Jun 18, 2024
@xhd2015
Copy link
Owner

xhd2015 commented Jun 23, 2024

@alpha-baby xgo 1.0.41发布了,这个版本的xgo e体验会好很多

@WAY29
Copy link

WAY29 commented Jul 16, 2024

在使用vscode时似乎可以编写简单的配置使用wrapped go,例如:

"go.alternateTools": {
        "go": "C:/coding/golang/bin/xgo.exe"
    }

但是这样的话实际上完全用不了,因为获取env报错,导致扩展似乎没法正常加载,例如:
image

所以希望xgo能够直接转发golang的其他子命令,例如go env:

if cmd != "build" && cmd != "run" && cmd != "test" && cmd != "exec" {
	fmt.Fprintf(os.Stderr, "xgo %s: unknown command\nRun 'xgo help' for usage.\n", cmd)
	os.Exit(1)
}

@xhd2015
Copy link
Owner

xhd2015 commented Jul 16, 2024

在使用vscode时似乎可以编写简单的配置使用wrapped go,例如:

"go.alternateTools": {
        "go": "C:/coding/golang/bin/xgo.exe"
    }

但是这样的话实际上完全用不了,因为获取env报错,导致扩展似乎没法正常加载,例如: image

所以希望xgo能够直接转发golang的其他子命令,例如go env:

if cmd != "build" && cmd != "run" && cmd != "test" && cmd != "exec" {
	fmt.Fprintf(os.Stderr, "xgo %s: unknown command\nRun 'xgo help' for usage.\n", cmd)
	os.Exit(1)
}

@WAY29 xgo不会转发任何命令,实际上,转发可以通过xgo shadow来做。具体来说:

  1. 运行xgo shadow, 输出: /Users/someone/.xgo/shadow
  2. 然后设置
{
  "go.alternateTools":{
    "go":"/Users/someone/.xgo/shadow/go"
  }
}

@WAY29
Copy link

WAY29 commented Jul 16, 2024

在使用vscode时似乎可以编写简单的配置使用wrapped go,例如:

"go.alternateTools": {
        "go": "C:/coding/golang/bin/xgo.exe"
    }

但是这样的话实际上完全用不了,因为获取env报错,导致扩展似乎没法正常加载,例如: image
所以希望xgo能够直接转发golang的其他子命令,例如go env:

if cmd != "build" && cmd != "run" && cmd != "test" && cmd != "exec" {
	fmt.Fprintf(os.Stderr, "xgo %s: unknown command\nRun 'xgo help' for usage.\n", cmd)
	os.Exit(1)
}

@WAY29 xgo不会转发任何命令,实际上,转发可以通过xgo shadow来做。具体来说:

  1. 运行xgo shadow, 输出: /Users/someone/.xgo/shadow
  2. 然后设置
{
  "go.alternateTools":{
    "go":"/Users/someone/.xgo/shadow/go"
  }
}

报错: xgo shadow not found in PATH: 然而根据环境变量,我是能找到xgo.exe的

@xhd2015
Copy link
Owner

xhd2015 commented Jul 16, 2024

需要将/Users/someone/.xgo/shadow这个目录加到PATH变量中

@WAY29
Copy link

WAY29 commented Jul 16, 2024

需要将/Users/someone/.xgo/shadow这个目录加到PATH变量中

似乎正常工作了,也许我们应该将这个命令放入README和xgo help中,并且将相关的ide配置方法也加入例子?我在这两个地方都没有看到shadow的用法, 另外我注意到,在使用xgo shadow后似乎vscode的coverage也不管用了

@xhd2015
Copy link
Owner

xhd2015 commented Jul 16, 2024

xgo shadow还处在一种实验状态,目前Goland没办法使用这种方式进行配置。

期望是改进xgo shadow, 其输出一个完整的Shadow GOROOT。然后Goland和VSCode用户都可以通过配置GOROOT指向Shadow GOROOT就可以了。

目前这个想法还有待验证。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants