gpt4 book ai didi

go - 如何访问主包之外的标志?

转载 作者:IT王子 更新时间:2023-10-29 00:35:25 24 4
gpt4 key购买 nike

我们parse flags当然是在 main 包中的 main.go 中。然后我们有另一个包,我们想在其中读取一些标志的值。

flags.Args()工作正常,它将返回所有非标志值。

但我不知道如何读取除 main 之外的包中标志的已解析值。

这可能吗?

谢谢

阿米尔

最佳答案

我最近有同样的需求,我想要一个避免在 init 函数中重复调用 flag.Parse 的解决方案。

细读 flag我找到的包 Lookup(name string) 返回一个 Flag它有一个 Value .每个内置值都实现了 flag.Getter 接口(interface)。调用链如下所示:

flag.Lookup("httplog").Value.(flag.Getter).Get().(bool)

如果您输入错误的标志名称或使用错误的类型,则会出现运行时错误。我将查找包装在一个函数中,我在需要的地方直接调用该函数,因为查找和获取方法速度很快,而且该函数不经常调用。所以主包声明了标志。

// main.go
package main

import "flag"

var httplog = flag.Bool("httplog", false, "Log every HTTP request and response.")

func main() {
flag.Parse()
// ...
}

除标志名外与main解耦的实用程序包读取标志值。

// httpdiag.go
package utility

import "flag"

func logging() bool {
return flag.Lookup("httplog").Value.(flag.Getter).Get().(bool)
}

关于go - 如何访问主包之外的标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26537806/

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