在使用Cobra之前,需要安装Go的依赖管理工具dep,使用下面的命令来安装或者升级。...现在,我继续在init函数中添加一些代码来初始化并设置环境变量的默认值。...还要注意的是,在上面的代码中,生成的目录下默认有$HOME/.thrasher.yaml的配置文件。目前,我没修改这个默认值,所以它还是默认的配置。...我想要用thrasher config view命令找到我的环境变量的配置。为此,我在view.go文件中添加了几行代码。...我要添加的第一个代码是使用viper来获取URI路径,并使用get来对URI路径发起一个请求。我将它添加到verify命令的指针函数中。
port: 8080 database: user: admin password: secret 读取配置 在Go应用程序中,使用Viper读取上述YAML配置文件: go package...Viper库使得管理配置变得更加简单,无论是在小型项目还是在复杂的微服务架构中,都能提高开发和维护的效率。...读取列表配置 要在Go程序中读取一个列表,我们可以使用Viper的Get函数配合类型断言,或直接使用专门的函数如GetStringMapString(适用于键值对列表)。...这种方法使得处理复杂的配置数据变得更加直观和简单,尤其是当配置数据结构较深或者配置信息较多时。通过结合使用Viper和Go的强类型系统,我们不仅能够提高代码的可读性,还能在编译时就捕获到潜在的错误。...总结 本文介绍了如何利用Viper库配合YAML配置文件在Go项目中管理配置。通过使用Viper,可以简化配置管理过程,同时保持代码的可维护性和可扩展性。
相信使用过 vim 的都知道spf13-vim,号称 vim 终极配置。 可以一键配置,对于我这样的懒人来说绝对是福音。他的viper是一个完整的配置解决方案。...所以我们的系统上要安装 git,且 git 在可执行路径中。目前我们只添加一个子命令version。...URL --bare 命令 在 cobra 中,命令和子命令都是用Command结构表示的。...配置文件的读取使用了 spf13 自己的开源项目viper(毒龙?真是起名天才)。 除了代码文件,cobra 还生成了一个 LICENSE 文件。...现在这个程序还不能做任何事情,我们需要给它添加子命令,使用cobra add命令: $ cobra add date 该命令在cmd目录下新增了date.go文件。
如下main.go文件中的调用命令入口: import "cmd" func main() { cmd.Execute() } 最后为了编码方便,在helpers.go中封装了调用外部程序和错误处理函数...可以在多处设置选项,按照一定的顺序取用; 使用脚手架轻松生成程序框架和命令。...选项为-a指定作者,--config string指定cobra-cli自己的配置文件 -l指定license,--viper使用viper来读取配置文件。...$ go run . --config==config/cfg.yaml 配置文件就成功载入了,现在你就可以用viper在需要的地方读取配置了。...全局选项和子命令自己使用的选项。 cobra-cli 自动创建项目,自动创建配置文件读取项目,自动增加子命令,自动增加嵌套子命令。
Cobra 是一个功能强大的现代化 CLI 应用程序库,有很多知名的 Go 项目使用 Cobra 进行构建,比如:Kubernetes、Docker、Hugo 等等 概念 Cobra 是构建在命令、参数和标识符之上的...initConfig 该函数主要用于在 home 目录下面设置一个名为 .my-calc 的配置文件,如果该文件存在则会使用这个配置文件。...= "" { // 使用 flag 标志中传递的配置文件 viper.SetConfigFile(cfgFile) } else { // 获取...这个默认值是非常重要的,意思就是即使没有在命令行中调用 flag 标识符,该标识符的值就将为 false。.../course/my-calc 和上面一样会在 root 目录下面新增一个名为 even.go 的文件,修改该文件中的 init 函数,将 rootCmd 修改为 addCmd,因为我们是为 addCmd
概念Cobra 是建立在命令、参数和标志这三个结构之上的。要使用 Cobra 编写一个命令行程序,需要明确这三个概念。命令(COMMAND):命令表示要执行的操作。...Use: "hugo":指定了该命令的使用方法,这里是hugo,这意味着用户在命令行中输入 hugo 时会触发这个命令。...the needed filesto quickly create a Cobra application.初始化的时候可能会出现cobra-cli init 命令不存在报错,可以通过配置环境变量或者使用绝对路径来解决...可选标志cobra-cli 提供了如下三个标志分别用来设置项目的作者、许可证类型、是否使用 Viper 管理配置。...*/如果你不想把配置保存在 ~/.cobra.yaml 中,cobra-cli 还提供了 --config 标志来指定任意目录下的配置文件。到这里,常用功能就总结的差不多了。
来自jetbrains Go 语言现状调查报告 显示:在go开发者中使用go开发实用小程序的比例为31%仅次于web,go得益于跨平台、无依赖的特性,用来编写命令行或系统管理这类小程序非常不错。...cobra基础使用 ---- 安装cobra包和二进制工具cobra-cli,cobra-cli可以帮助我们快速创建出一个cobra基础代码结构。...接下来我们在结构体中添加Args用于验证(限制)参数数量,在init()函数中添加Flag -o用于保存下载的文件地址,并通过 MarkFlagRequired约束flag的参数必须输入,最后在Run中调用...简单的应用从命令行直接写入参数是很常见的,但是如果比较复杂的命令行应用参数需要非常多,再这样操作不太合理,cobra作者还写了另一个在go中很流行的包viper用于解析配置文件,比如kubectl 的yml...通过 -h查看帮助: 参数个数错误: 需要flag -o: 正确使用: xpower 子命令ping: xpower 子命令wget: ---- 以上我们通过go中cobra包实现xpower
深入解析fabric的peer命令(一) 一,探索思路 peer命令的源码在https://github.com/hyperledger/fabric的cmd目录下,这个目录下有 1.common 2....在主函数中,首先进行了一些设置,然后添加了一些命令和子命令,最后执行了 mainCmd。...,以便从配置中读取对应的值。...在 Hyperledger Fabric 中,chaincode.Cmd 函数用于创建与链码相关的命令。它接受两个参数:chaincodeID 和 cryptoProvider。...因此,mainCmd.AddCommand(chaincode.Cmd(nil, cryptoProvider)) 的作用是将与链码相关的命令添加到 mainCmd 中,其中使用了默认的加密提供程序,并且不指定特定的链码标识
本章节主要的内容是对go-admin中的一些有趣编码进行分析,为自己以后提供一些借鉴 使用cli方式启动项目 使用cobra[眼镜蛇]完成强壮cli的工具,确保稳定。...使用cli的方式启动项目的好处显而易见,可以在进行配置的自定义化,而不是固定的使用某个配置文件中的信息。在一些需要频繁更换命令参数的场景下尤为有效。...cobra的使用有一个默认的规定,即新建一个cmd文件夹,基于这个文件夹定义自己的命令结构 1、小型项目 cmd 文件夹 -- root.go 根命令 -- version.go 版本命令【子命令】...Viper的使用 viper的使用,配置文件路径,获取viper根类 //数据库配置 cfgDatabase = viper.Sub("settings.database") DatabaseConfig...文件夹中定义实体类,对应config.yml中的分类 举例:application.go对应图二的application分类内容,其他的也是同样意思 此目录下的内容,package包名为config
可选与viper无缝集成,用于 12 要素应用程序(viper是作者的另一个项目,用来给go语言程序提供配置解决方案,可以将cobra和viper结合使用) Cobra安装 cobra提供了用于go get...在mycmd目录下执行下面的命令。 cobra-cli init 执行该命令会在当前目录下生成cmd目录,main.go等文件。现在尝试运行一下自动生成的命令行程序。...go run main.go 确保可以成功运行即可 修改自动生成的程序为你自己的功能 使用cobra-cli生成以后,目录结构如下所示。...由于我们在自动生成的时候,没有使用-l(–license)参数,因此自动生成的LICENSE文件为空。main.go文件和cmd目录下的root.go才是我们关心的重点。...error 使用标志 由于标志是在不同的位置定义和使用的,我们需要在外部定义一个具有正确范围的变量来分配标志以使用。
简介 来自jetbrains Go 语言现状调查报告 显示:在go开发者中使用go开发实用小程序的比例为31%仅次于web,go得益于跨平台、无依赖的特性,用来编写命令行或系统管理这类小程序非常不错。...cobra用于许多GO项目,如Kubernetes,Hugo和Github Cli,以命名几个。此列表包含使用cobra的项目列表。...接下来我们在结构体中添加Args用于验证(限制)参数数量,在init()函数中添加Flag -o用于保存下载的文件地址,并通过MarkFlagRequired约束flag的参数必须输入,最后在Run中调用...作者还写了另一个在go中很流行的包viper用于解析配置文件,比如kubectl 的yml,以及各种json 前面也说过可以无缝衔接,只需Bind一下即可。...通过-h查看帮助: 参数个数错误: 需要flag-o: 正确使用:xpower 子命令ping: xpower 子命令wget: 小结 以上我们通过go中cobra包实现
和max之间OnlyValidArgs 验证传入参数是否在list中 PS:这里如果没有传入任何参数,那么不会做校验需要搭配:ValidArgs-指定参数的值列表一起使用。...如果我们想在versionCmd中也能拥有和rootCmd一样的v标志,我们可以使用PersistentFlags。...比如我们希望在执行某个命令前、后执行一些操作,比如读取配置文件,那么我们可以使用钩子。...Hello: dmyhello执行后执行如果我们希望钩子在子命令中生效,我们可以使用PersistentPreRun和PersistentPostRun。...hello.yaml我们能从命令行中获取到配置文件,并且配置文件是绑定到viper的config变量中的,就可以进一步对配置文件进行操作了。
在主函数中,首先进行了一些设置,然后添加了一些命令和子命令,最后执行了 mainCmd。...viper.BindPFlag("logging_level", mainFlags.Lookup("logging-level")) 将命令行标志 logging-level 绑定到配置中的键 logging_level...,以便从配置中读取对应的值。...在 Hyperledger Fabric 中,chaincode.Cmd 函数用于创建与链码相关的命令。它接受两个参数:chaincodeID 和 cryptoProvider。...因此,mainCmd.AddCommand(chaincode.Cmd(nil, cryptoProvider)) 的作用是将与链码相关的命令添加到 mainCmd 中,其中使用了默认的加密提供程序,并且不指定特定的链码标识
大家好,我是你的Go开发技术博主。今天我们将一起探讨一个在Go社区非常热门的库——Viper。在任何大型的应用中,无论是前端还是后端,配置都是必不可少的一部分。...在Go中,我们有一个强大的库可以帮助我们处理配置,那就是Viper。 Viper是GitHub上spf13开发的一个项目,它提供了一种简单的方式来管理和存储应用程序的配置。...("db.host")) 在这个例子中,我们首先设置了配置文件的路径。...这种情况可能在你从网络上接收到配置信息或者在你的代码中直接定义一些默认配置时出现。 在Viper中,我们可以使用viper.ReadConfig函数,该函数接受一个io.Reader。...其中一些项目包括:Hugo,一个用于构建网站的静态网站生成器;Cobra,一个用于构建现代Go CLI交互的命令行库;Viper,一个用于Go应用程序的配置库;
关键技术点 命令行参数与配置文件的差异 github.com/spf13/viper的介绍 使用viper库的推荐方式 目录构造 github.com/spf13/viper中存在一个全局变量var v...*Viper(点击查看),如果我们调用默认的viper包,其实就是将参数解析到这个全局变量中。.../demo --config=a.yaml --http_port=8080 --grpc_port=8081,Go语言中自带flag包可供解析,开源的有pflag和相关的扩展工具,如cobra。...,如配置文件的路径 配置文件:维护绝大多数的参数 在某些极端的场景中,比如提供一个纯二进制文件作为工具,那不得不把所有配置参数都放入到命令行参数中。...所以,我不太建议在配置文件这里引入监听文件变化的特性。 核心代码示例 main.go 从flag中解析出配置文件路径,传到config包中用于解析。
= "" { // SetConfigFile 显式定义配置文件的路径、名称和扩展名。 // Viper 将使用它而不检查任何配置路径。...= "" { // SetConfigFile 显式定义配置文件的路径、名称和扩展名。 // Viper 将使用它而不检查任何配置路径。...配置文件 viper可以配合pflag来使用,pflag可以理解为标准库flag的一个增强版,viper可以绑定到pflag上 和cobra,viper一样,pflag也是同一作者的作品 ---- 验证一下...= "" { // SetConfigFile 显式定义配置文件的路径、名称和扩展名。 // Viper 将使用它而不检查任何配置路径。...= "" { // SetConfigFile 显式定义配置文件的路径、名称和扩展名。 // Viper 将使用它而不检查任何配置路径。
一、CLI 命令(spf13/cobra) Cobra 既是一个用于创建强大的现代 CLI 应用程序的库,也是一个用于生成应用程序和命令文件的程序。...我使用这个库来管理命令应用程序,执行运行程序,初始化配置,并启动 Rest API。...二、配置读取器(spf13/viper) iper 是 Go 应用程序的完整配置解决方案。...= nil { panic(fmt.Errorf("Fatal error config file: %s \n", err)) } } 然后在 main.go 中使用 config...五、Swagger Generator, UI 和 Validation 在 swagger 部分,我必须使用不同的 3 个库,因为我没有找到 1 个库同时包含这个 3 个库功能的。
Viper不默认任何配置搜索路径,将默认决策留给应用程序; 下面是一个如何使用Viper搜索和读取配置文件的示例。..."$HOME/.appname") // 多次调用以添加多个搜索路径 viper.AddConfigPath(".") // 还可以在工作目录中查找配置 err := viper.ReadInConfig...对于位于用户$HOME目录中的配置文件没有任何扩展名,如.bashrc; 当你使用如下方式读取配置时,viper会从./conf目录下查找任何以config为文件名的配置文件,如果同时存在....具体来说,Viper支持Cobra库中使用的Pflag; 与BindEnv类似,该值不是在调用绑定方法时设置的,而是在访问该方法时设置的。...在上面的所有示例中,它们都以其单例风格的方法演示了如何使用viper。 使用多个viper实例 你还可以在应用程序中创建许多不同的viper实例。每个都有自己独特的一组配置和值。
")) } 我们使用之前Go 每日一库之 go-ini一文中使用的配置,不过改为 toml 格式。...: ", viper.AllSettings()) } 我们在配置文件 config.toml 中添加protocols和ports配置: [server] protocols = ["http", "...设置键值 viper 支持在多个地方设置,使用下面的顺序依次读取: 调用Set显示设置的; 命令行选项; 环境变量; 配置文件; 默认值。...还可以通过viper.SetEnvPrefix方法设置环境变量前缀,这样一来,通过AutomaticEnv和一个参数的BindEnv绑定的环境变量, 在使用Get的时候,viper 会自动加上这个前缀再从环境变量中查找...默认值 在上面的快速使用一节,我们已经看到了如何设置默认值,这里就不赘述了。 读取配置 从io.Reader中读取 viper 支持从io.Reader中读取配置。
领取专属 10元无门槛券
手把手带您无忧上云