goc icon indicating copy to clipboard operation
goc copied to clipboard

goc build -o 参数 二进制路径有可能出现与想要的不符

Open wangjielalala opened this issue 3 years ago • 4 comments

场景: 当一个module中包含多个main模块,有可能出现在go mod 路径下的 执行: goc build . , 输出的二进制文件的路径 却不在go mod 路径下面 image

源码:

build/build.go 133:145
Pkgs          map[string]*cover.Package
// fix #43
// use target name from `go list -json ./...` of the main module
targetName := ""
for _, pkg := range b.Pkgs {
	if pkg.Name == "main" {
		if pkg.Target != "" {
			targetName = filepath.Base(pkg.Target)
		} else {
			targetName = filepath.Base(pkg.Dir)
		}
		break
	}
}
return filepath.Join(b.WorkingDir, targetName), nil

描述: 上面的 Pkgs 是map,当有多个的main模块的时候,是随机返回一个 二进制文件的路径,这种可否可以优化一下

wangjielalala avatar Jan 20 '22 04:01 wangjielalala

一个 module path 下只有一个 main package。 go build 最多只会输出一个二进制,且多个 main 时候本来就是一个不常用的行为(只会编译检查无输出,打包按我理解没太多用)

$ go help build

When compiling multiple packages or a single non-main package,
build compiles the packages but discards the resulting object,
serving only as a check that the packages can be built.

所以 goc build ./... 选择了简单处理。

lyyyuna avatar Jan 20 '22 09:01 lyyyuna

我知道 go build 最多只会输出一个二进制 直观理解,有些项目多个工程放在同一个仓库当中,这样 当在某个工程的根目录,执行 goc build . 的时候, 会出现 编译出的二进制包,在另一个工程的根目录下 的情况,难道这个没有问题吗

wangjielalala avatar Jan 20 '22 09:01 wangjielalala

PR is welcome

lyyyuna avatar Jan 20 '22 09:01 lyyyuna

看下来这里只要follow go build . 的行为就好.

CarlJi avatar Jan 20 '22 10:01 CarlJi