cobra是Go语言的一个命令行库,用来编写程序的命令行功能。并且提供了一个脚手架, 可以用于生成基于 cobra 的应用程序框架。许多知名的开源项目都使用 cobra 库实现命令行功能,例如:Kubernetes、etcd等等。 cobra 提供可以为程序提供许多功能,包括:支持子命令、兼容 POSIX 选项、嵌套子命令等,并可使用脚手架轻松生成程序框架和命令。 了解之前需要明确 3 个基本概念:
包(package)是多个 Go 源码的集合,是一种高级的代码复用方案,像 fmt、os、io 等这样具有常用功能的内置包在 Go语言中有 150 个以上,它们被称为标准库,大部分(一些底层的除外)内置于 Go 本身。 包要求在同一个目录下的所有文件的第一行添加如下代码,以标记该文件归属的包: package 包名 包的特性如下: 一个目录下的同级文件归属一个包。 包名可以与其目录不同名。 包名为
主要内容:使用命令行查看GOPATH信息,使用GOPATH的工程结构,设置和使用GOPATH,在多项目工程中使用GOPATHGOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。 工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面、计算机及椅子就是你的工作区。工作区的概念与工作目录的概念也是类似的。如果不使用工作目录的概念,在多人开发时,每个人有一套自己的目录结构,读取配置文件的位置不统一,输出的二进制运行文件也不统一,这样
Go语言中 continue 语句可以结束当前循环,开始下一次的循环迭代过程,仅限在 for 循环内使用,在 continue 语句后添加标签时,表示开始标签对应的循环,例如: 代码输出结果如下: 0 2 1 2 代码说明:第 14 行将结束当前循环,开启下一次的外层循环,而不是第 10 行的循环。
Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。 下面来看下并发情况下读写 map 时会出现的问题,代码如下: 运行代码会报错,输出如下: fatal error: concurrent map read and map write 错误信息显示,并发的 map 读和 map 写,也就是说使用了两个并发函数不断地对 map 进行读和写而发生了竞态问题,map 内部会对
主要内容:使用 goto 退出多层循环,使用 goto 集中处理错误Go语言中 goto 语句通过标签进行代码间的无条件跳转,同时 goto 语句在快速跳出循环、避免重复退出上也有一定的帮助,使用 goto 语句能简化一些代码的实现过程。 使用 goto 退出多层循环 下面这段代码在满足条件时,需要连续退出两层循环,使用传统的编码方式如下: 代码说明如下: 第 10 行,构建外循环。 第 13 行,构建内循环。 第 16 行,当 y==2 时需要退出所有的 for
主要内容:基本写法,跨越 case 的 fallthrough——兼容C语言的 case 设计Go语言的 switch 要比C语言的更加通用,表达式不需要为常量,甚至不需要为整数,case 按照从上到下的顺序进行求值,直到找到匹配的项,如果 switch 没有表达式,则对 true 进行匹配,因此,可以将 if else-if else 改写成一个 switch。 相对于C语言和 Java 等其它语言来说,Go语言中的 switch 结构使用上更加灵活,语法设计尽量以使用方便为主。 基本写
Go 语言循环语句 Go 语言的 goto 语句可以无条件地转移到过程中指定的行。 goto语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。 但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。 语法 goto 语法格式如下: goto label; .. . label: statement; break 语句
Go 语言循环语句 Go 语言的 continue 语句 有点像 break 语句。但是 continue 不是跳出循环,而是跳过当前循环执行下一次循环语句。 for 循环中,执行 continue 语句会触发for增量语句的执行。 语法 continue 语法格式如下: continue; continue 语句流程图如下: Go 语言循环语句