我正在创建一个快速且肮脏的Go应用,以从Vault中提取应用程序 secret ,并使用Vault代码本身进行身份验证。作为此过程的一部分,我将从github.com/hashicorp/vault/builtin/credential/aws导入aws凭证模块。一切都很好。

但是,在运行我的应用程序时,我注意到Go“测试”模块中的命令行标志出现在标志中。

可以通过编译并运行以下示例脚本来重现此内容:

package main

import (
    "flag"
    _ "github.com/hashicorp/vault/builtin/credential/aws"
    // Note: this import is masked only to make this demo script compile.
    // In my actual code I need to use it, and it is not masked.
)

var myFlag string

func main() {
    flag.StringVar(
        &myFlag, "myFlag", "", "Test flag",
    )
    flag.Parse()
    flag.Usage()
}

调用二进制文件时,标志的显示如下:
Usage of poc:
  -myFlag string
        Test flag
  -test.bench regexp
        run only benchmarks matching regexp
  -test.benchmem
        print memory allocations for benchmarks
  -test.benchtime d
        run each benchmark for duration d (default 1s)
  -test.blockprofile file
        write a goroutine blocking profile to file
  -test.blockprofilerate rate
        set blocking profile rate (see runtime.SetBlockProfileRate) (default 1)
  -test.count n
        run tests and benchmarks n times (default 1)
  [... more flags from the go testing module ...]

我是Go的新手,所以很有可能我正在做我不应该在这里做的事情,但是乍一看,为命令行工具导入此模块似乎是合理的。

据我所知,模块中没有任何东西使用测试库(backend_test.go除外),所以我对这些标志的显示方式有些困惑,尤其是因为它们未在Vault命令行中显示接口(interface)本身。

是否可以在不包含这些标志的情况下导入和使用Vault的凭证/aws模块?还是以某种方式在定义自己的测试标志之前清除测试标志?

最佳答案

这是因为即使您使用_屏蔽github.com/hashicorp/vault/builtin/credential/aws,导入也确实发生了。然后,程序包导入了testing,生成了所有这些标志。

您可以使用新的FlagSet摆脱testing标志。

func main() {
    f:=flag.NewFlagSet("Your app name",flag.ExitOnError)
    f.StringVar(
        &myFlag, "myFlag", "", "Test flag",
    )
    f.Parse(os.Args)
    f.Usage()
}

游乐场:https://play.golang.org/p/O8ibPn77L46

关于go - 导入Vault/builtin/credential/aws会将测试标记添加到命令行应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48062633/

10-13 07:23