我的Go+语言初体验——玩转 Go+ 命令行
目录
什么是 Go+
Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。
什么是命令行
命令行参数是参数化程序执行的常用方法。比如,gop run hello.go 命令中使用 gop 程序的 run 参数和 hello.go 参数。Go+ 提供了命令行参数的使用方法,今天我们就来了解一下这方面的一些内容。
Args 介绍
Args 包含了程序执行时所有相关的命令行参数信息,并且以数组的形式进行收集保存,我们可以通过解析 os.Args 属性获取对应的命令行参数。简单写一段 Go+ 代码:
import (
"os"
)
argsWithProg := os.Args
arg := os.Args[0]
println("参数数组:", argsWithProg)
println("参数1:", arg)
输出结果:
参数数组: [/tmpfs/play]
参数1: /tmpfs/play
基础标识
基本标识声明可用于字符串、整数和布尔选项。比如,我们声明一个字符串标识词,其默认值为“foo”,并有一个简短的描述。然后,以相同的方式声明一个整型和布尔类型的标识。示例代码如下:
wordPtr := flag.String("word", "foo", "a string")
numbPtr := flag.Int("numb", 42, "an int")
forkPtr := flag.Bool("fork", false, "a bool")
还可以操作一个已经定义好的变量。注意,我们需要传入一个指向标识声明函数的指针。示例代码如下:
var svar string
flag.StringVar(&svar, "svar", "bar", "a string var")
在所有的命令行标识声明后,就调用 flag.Parse 方法执行命令行解析。
下面一段测试代码:
import (
"flag"
)
wordPtr := flag.String("word", "foo", "a string")
numbPtr := flag.Int("numb", 42, "an int")
forkPtr := flag.Bool("fork", false, "a bool")
var svar string
flag.StringVar(&svar, "svar", "bar", "a string var")
flag.Parse()
println("word:", *wordPtr)
println("numb:", *numbPtr)
println("fork:", *forkPtr)
println("svar:", svar)
println("tail:", flag.Args())
执行效果:
word: foo
numb: 42
fork: false
svar: bar
tail: []
将上述代码保存为文件 command-line-flags.gop,编译后,分别执行如下命令。
修改所有命令行标识,命令如下:
./command-line-flags -word=opt -numb=7 -fork -svar=flag
执行结果:
word: opt
numb: 7
fork: true
svar: flag
tail: []
尾部参数在解析标识之后自动匹配,命令如下:
./command-line-flags -word=opt a1 a2 a3
执行结果:
word: opt
...
tail: [a1 a2 a3]
也可以使用 -h 或者 --help 命令查看帮助信息,命令如下:
./command-line-flags -h
执行结果:
Usage of ./command-line-flags:
-fork=false: a bool
-numb=42: an int
-svar="bar": a string var
-word="foo": a string
NewFlagSet 妙用
我们可以使用 NewFlagSet 方法定义自己的子命令,同时为该子命令定义特定的新标志。同一个程序中,我们可以定义多个不同的子命令。测试代码如下:
package main
import (
"flag"
"os"
)
fooCmd := flag.NewFlagSet("foo", flag.ExitOnError)
fooEnable := fooCmd.Bool("enable", false, "enable")
fooName := fooCmd.String("name", "", "name")
barCmd := flag.NewFlagSet("bar", flag.ExitOnError)
barLevel := barCmd.Int("level", 0, "level")
if len(os.Args) < 2 {
println("expected 'foo' or 'bar' subcommands")
os.Exit(1)
}
switch os.Args[1] {
case "foo":
fooCmd.Parse(os.Args[2:])
println("subcommand 'foo'")
println(" enable:", *fooEnable)
println(" name:", *fooName)
println(" tail:", fooCmd.Args())
case "bar":
barCmd.Parse(os.Args[2:])
println("subcommand 'bar'")
println(" level:", *barLevel)
println(" tail:", barCmd.Args())
default:
println("expected 'foo' or 'bar' subcommands")
os.Exit(1)
}
将上述文件保存成 subcommand.go 文件,然后执行如下命令进行编译:
gop build subcommands.go
执行如下命令:
./subcommands foo -enable -name=joe a1 a2
输出结果:
subcommand 'foo'
enable: true
name: joe
tail: [a1 a2]
执行如下命令:
./subcommands bar -level 8 a1
输出结果:
subcommand 'bar'
level: 8
tail: [a1]
执行如下命令:
./command-line-subcommands bar -enable a1
输出结果:
flag provided but not defined: -enable
Usage of bar:
-level int
level
相关推荐
学习 Go 语言(Golang)
总之,“学习 Go 语言(Golang).pdf”这份文档应该是一个全面的指南,涵盖了从入门到进阶的所有关键知识点,帮助你快速掌握 Go 语言并能应用于实际开发中。
golang GO语言开发工具
golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语言开发工具golang GO语
Jni-Golang:java调用golang(通过Go1.5共享库)
在命令行中运行: ``` javah -jni JniGolangExample ```5.
Go-go-selfupdate-使Golang应用程序能够自我更新
在IT行业中,Go语言(Golang)以其简洁的语法、高效的性能和强大的并发能力而备受开发者喜爱。
golang语言,window系统下安装go语言包
在 Windows 系统下安装 Go 语言包,可以按照以下步骤进行:下载 Go 语言包在官网 https://golang.org/dl/ 中下载适合你系统的Go语言包,选择 .msi 安装包下载即可


