gpt4 book ai didi

go - 导入 vault/builtin/credential/aws 将测试标志添加到命令行应用程序

转载 作者:IT王子 更新时间:2023-10-29 01:57:19 30 4
gpt4 key购买 nike

我正在创建一个快速而肮脏的 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 命令行界面本身。

是否可以在不包含这些标志的情况下导入和使用 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()
}

Playground :https://play.golang.org/p/O8ibPn77L46

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com