登录
首页 >  Golang >  Go问答

删除信息的Go Build

来源:stackoverflow

时间:2024-02-07 20:33:26 192浏览 收藏

本篇文章向大家介绍《删除信息的Go Build》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我已经可以使用Go Build删除项目当前目录信息,也可以删除Gopath信息,如下,我现在只能单独删除其中一个

go build -gcflags“all=-trimpath=${GOPATH}”-asmflags“all=-trimpath=${GOPATH}”

但我不知道如何同时删除它们,我不知道如何组合它

在 Windows 上,我尝试这个

go build -gcflags“all=-trimpath=%CD%” -asmflags“all=-trimpath=%CD%” -gcflags“all=-trimpath=%GOPATH%” -asmflags“all=-trimpath=%” GOPATH%"

不起作用

最终结果

@ZekeLu,答案是正确的。

我想解释一下发生了什么,我本来希望去掉GOROOT信息,但是我写了GOPATH,所以我以为@ZekeLu的第二个答案是错误的,现在我修改并测试了,没有问题,两个答案都对 p>

正确答案


尝试这个命令:

go build -trimpath

这是 go 命令的 -trimpath 标志的文档

-修剪路径

从生成的可执行文件中删除所有文件系统路径。 记录的文件名而不是绝对文件系统路径 将开始模块路径@版本(使用模块时), 或普通导入路径(使用标准库或 gopath 时)。

如果你只想删除一些前缀,你可以这样做:

go build -gcflags "all=-trimpath=%cd%;%gopath%" -asmflags "all=-trimpath=%cd%;%gopath%"

编译命令asm 命令 调用 objabi.applyrewrites 来修剪路径。根据 objabi 的实现.applyrewritesrewrites 参数是一个以 ; 分隔的重写列表。

// ApplyRewrites returns the filename for file in the given directory,
// as rewritten by the rewrites argument.
//
// The rewrites argument is a ;-separated list of rewrites.
// Each rewrite is of the form "prefix" or "prefix=>replace",
// where prefix must match a leading sequence of path elements
// and is either removed entirely or replaced by the replacement.
func ApplyRewrites(file, rewrites string) (string, bool) {
    start := 0
    for i := 0; i <= len(rewrites); i++ {
        if i == len(rewrites) || rewrites[i] == ';' {
            if new, ok := applyRewrite(file, rewrites[start:i]); ok {
                return new, true
            }
            start = i + 1
        }
    }

    return file, false
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《删除信息的Go Build》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>