- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Go 中开发一个应用程序,它接受命令行上的输入作为键值对字符串。为此,我使用 StrngToStringVar
来自眼镜蛇图书馆。
我还使用 Viper 将这些标志绑定(bind)到配置,但是无论我输入什么值,我似乎都无法从 Viper 获得它。
这是代码
package main
import (
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/davecgh/go-spew/spew"
)
func main() {
var items map[string]string
var name string
rootCmd := &cobra.Command{
Use: "cobra",
Short: "Test options on the command line",
Long: ``,
Run: func(ccmd *cobra.Command, args []string) {
spew.Dump(viper.GetString("name"))
spew.Println("")
fmt.Println("GetStringMap")
spew.Dump(viper.GetStringMap("items"))
fmt.Println("")
fmt.Println("GetStringMapString")
spew.Dump(viper.GetStringMapString("items"))
},
}
rootCmd.Flags().StringVar(&name, "name", "", "Name of the list")
rootCmd.Flags().StringToStringVar(&items, "item", nil, "Map stating the items to be included")
viper.BindPFlag("name", rootCmd.Flags().Lookup("name"))
viper.BindPFlag("items", rootCmd.Flags().Lookup("item"))
rootCmd.Execute()
}
go run .\main.go --item shopping=apple,banana --name foobar
运行它我得到以下结果
(string) (len=6) "foobar"
GetStringMap
(map[string]interface {}) {
}
GetStringMapString
(map[string]string) {
}
map[string]string
缺乏了解来自眼镜蛇。
最佳答案
就绑定(bind)部分而言,是正确的。但是,在处理之前,您可以使用 vipver.IsSet() 验证特定 key 是否存在。 , 使用 viper.AllKeys() 打印所有可用的 key 或使用 viper.AllSettings() 打印所有内容.
这是一个示例(test.go
):
package main
import (
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
func main() {
var items map[string]string
rootCmd := &cobra.Command{
Use: "app",
Run: func(ccmd *cobra.Command, args []string) {
fmt.Println("item exists?", viper.IsSet("item"))
fmt.Println("GetString :", viper.GetString("item"))
fmt.Println("Keys :", viper.AllKeys())
fmt.Println("Settings :", viper.AllSettings())
},
}
rootCmd.Flags().StringToStringVarP(&items, "item", "i", nil, "Map stating the items to be included")
viper.BindPFlag("item", rootCmd.Flags().Lookup("item"))
rootCmd.Execute()
}
$ ./test.exe -i 'k=v,"a=b,c"'
item exists? true
GetString : [k=v,"a=b,c"]
Keys : [item]
Settings : map[item:[k=v,"a=b,c"]]
GetStringMap()
的用法和
GetStringMapString()
对 JSON、YAML 等其他格式更有意义。您可以将这些函数的执行跟踪到 Debug模式下的 JSON 解码调用。
func getStringMap(s string) map[string]string {
entries := strings.Split(s, ",")
m := make(map[string]string)
for _, e := range entries {
tokens := strings.Split(e, "=")
k := strings.TrimSpace(tokens[0])
v := strings.TrimSpace(tokens[1])
m[k] = v
}
return m
}
关于go - 如何使用 Viper 访问 `StringToStringVar` 类型的 Cobra Flag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58452611/
该应用程序的本质是一个 UITableView,当用户向下滚动 tableView 时,它会在每一行上显示 UIImages。我应该如何在不破坏 VIPER 架构的情况下将图像加载到单元格中? --V
1 介绍 Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。目前Star 26.6k, 它支持以下特性: 设置默认值
VerCors 中的一个错误生成了一些银色,看起来像: field f: Int method test(n: Int, x: Ref) requires n == 100 requires acc(
这是我的config.yaml文件 server: port: 5000 这是我使用毒蛇解码的逻辑 type Configurations struct { Server ServerCo
在iOS VIPER项目中,每个模块都需要调用远程服务(例如刷新 token +检查用户登录)。实现这一需求的最佳实践是什么? 每个模块可以有多个交互器吗? 或者我们应该在每个模块(交互器)中实现相同
我在使用 viper 时遇到问题,我已经通过 viper 方法分配了变量,所以当我尝试在任何函数中获取值时,我得到的是空值。有谁知道为什么会这样?任何其他变量初始化工作正常,但 viper GetSt
我用毒蛇 https://github.com/spf13/viper用于在我的 GO 应用程序中管理项目配置,以及将配置值解码为结构体。 var config c.Configuration //
我正在寻找 go 和 https://github.com/spf13/viper 的配置解析器似乎强烈推荐。 我很惊讶地发现配置文件默认没有经过验证。 Viper 解析文件并从中提取请求的值,但我找
我有一个类似于以下的 yaml 文件: ComplexItemList: - Name: First Complex item Date: Whenever StructItemList:
在VIPER设计模式,Interactor 应该返回可能被多个演示者操作使用的所有信息,还是我应该为每个演示者设置一个单独的结构? 在我的例子中,我有一张显示地点的 map 。要显示这些地点,我需要从
我正在按照 VIPER 设计模式在 Swift 中构建应用程序。 VIPER 包含四个组件: 1) 查看2)线框3) 主持人4) 交互器 我的常量将出现在哪个组件中以及如何出现? 最佳答案 如果你的意
假设我们必须每 10 秒更新一次数据。我们应该在哪里创建/存储计时器,它会在 VIPER 架构中的什么地方触发相关方法?ViewController 应该这样做并通知演示者吗?还是 Presenter
作为初学者,我曾经在 ViewControllers 中执行转场。此外,Apple 鼓励这种方法,因为 UIViewController 有方法 performSegue 和 prepareForSe
我正在将我的项目更改为 VIPER 模式。 我的主要观点有很多观察者。我找不到应该将我的观察员放在 VIPER 中的什么位置。 因为我不想让我的观察者出现在视野中。以前我有单独的观察者类,当有通知时,
考虑到VIPER结构 我有两个模块,A 和 B。第一个模块 A,通过演示者,想要执行一个必须在模块 B 中完成的 Action ,所以告诉它的线框去做。问题是,谁负责实例化整个模块( View 、交互
我正在尝试使用 viper ( see viper docs ) 读取 yaml 配置文件。但是我看不到一种方法来读取问题类型下的 map 值序列。我尝试了各种 Get_ 方法但似乎没有人支持这一点。
我有一个 yaml 配置文件,其中包含我的程序的所有设置。例如: something: enabled: true 我正在使用 https://github.com/spf13/viper获取
我正在尝试从配置中获取一些名称未知的组(稍后会获取更多)。 我是 golang 的新手,有点吃力。我正在使用 Viper,因为它支持 yaml、json 和 toml。 json 配置: {
有没有办法从加载的配置文件中删除键/值对? viper.Set("key", nil) 不工作 最佳答案 尝试 delete(viper.Get("path.to.key").(map[string]
我注意到这可能是 viper 尝试解码为结构时的错误。为了更好地解释它,请考虑以下内容: 我有一个如下所示的 cli 命令 dd-cli submit-bug --name "Bug 1"--tag
我是一名优秀的程序员,十分优秀!