Golang: 打印命令行参数
记得最早在学校机房学习 Java 时,照着书上的例子,写一个最简单 main 方法,当程序运行并在屏幕上打印出 hello world 时,内心竟有种莫名的激动,相信很多人都有这种经历吧。
不管学什么编程语言,都先从命令行程序搞起。
首先,我们来写一个 Go 语言版的 hello world 程序:
// hello.go
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
接下来,我们可以直接在命令行执行下面的命令来运行该程序:
$ go run hello.go
当然,也可以先将源代码编译成可执行文件,然后再运行可执行文件:
# 在当前目录会生成同名可执行文件
$ go build hello.go
# 运行可执行文件
$ ./hello
运行完程序,命令行会输出一个 hello world,对于刚入门的同学,这一刻兴奋的心情是难以言表的。
我们可不是这么轻易就满足的,接下来,我们还要接收命令行参数并打印出来,趁着刚才的兴奋劲儿再写一段程序:
// args.go
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args[:]);
}
上面的代码看上去很简单,却多了些奇怪的写法。首先,我们新引入了一个 os 包,然后又多了个 os.Args[:] 这样的写法。
os 是操作系统相关功能包,os.Args 表示命令行参数,它的类型是 []string 字符串切片,我们通过 os.Args[:] 获取所有命令行参数,其中第一个是当前执行的文件,后面是额外指定的参数。
这些知识点后续也会深入介绍,现在先不管他三七二十一,跑一跑遛遛再说。
编译后运行可执行文件:
$ ./args hello world
# 输出结果
[./args hello world]
一般来说,我们真正需要的是从第二个位置开始的参数,下面程序利用 len() 函数获取切片的长度,然后使用 for 循环从索引为 1 的地方开始取值,取出的值以连字符分隔开:
// args.go
package main
import (
"fmt"
"os"
)
func main() {
// 声明后默认值是空字符串
var str, sep string
for i := 1; i < len(os.Args); i++ {
str += sep + os.Args[i]
sep = "-"
}
fmt.Println(str)
}
再次编译后运行:
$ ./args hello world
# 输出结果
hello-world
我们还可以先利用 os.Args[1:] 获取到所需的参数集,然后使用 range 来遍历参数集:
// args.go
package main
import (
"fmt"
"os"
)
func main() {
// 声明并初始化的简写方式
str, sep := "", ""
// range会产生{index, value} 这里不需要index
for _, arg := range os.Args[1:] {
str += sep + arg
sep = "-"
}
fmt.Println(str)
}
最后,我们还可以引入 strings 包,使用 strings.Join() 方法,将参数集以指定字符分隔开:
// args.go
package main
import (
"fmt"
"os"
"strings"
)
func main() {
fmt.Println(strings.Join(os.Args[1:], "-"));
}
现在,我们已经学会好几种“回字”的写法了。
Golang: 打印命令行参数的更多相关文章
- Golang: Cobra命令行参数库的使用
将cobra下载到 $GOPATH,用命令: go get -v github.com/spf13/cobra/cobra 然后使用 go install github.com/spf13/cobra ...
- nginx 支持的命令行参数
Command-line parameters 命令行参数 nginx supports the following command-line parameters: nginx支持以下命令行参数 - ...
- nginx使用手册--nginx的命令行参数
nginx的命令行参数 -? 或者 -h 打印命令行参数帮助信息 -c file 为 Nginx 指定一个配置文件,来代替缺省的. -t 不运行,而仅仅测试配置文件.nginx 将检查配置文件的语法的 ...
- golang命令行参数
os.Args获取命令行参数 os.Args是一个srting的切片,用来存储所有的命令行参数 package main import ( "fmt" "os" ...
- golang学习笔记 ---命令行参数
os 包以跨平台的方式,提供了一些与操作系统交互的函数和变量.程序的命令行参数可从os包的Args变量获取:os包外部使用os.Args访问该变量. os.Args变量是一个字符串(string)的切 ...
- [日常] Go语言圣经-命令行参数
1.编译 go build hello.go 2.go get gopl.io/ch1/helloworld 命令,就会从网上获取代码,并放到对应目录中 下载的代码会放在$GOPATH/src/gop ...
- python处理命令行参数
直接从命令行执行py文件的时候如果带有参数,如何获取这些参数,如何解析? http://blog.chinaunix.net/uid-20786165-id-3182268.html sys.argv ...
- .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]
较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参 ...
- [转]Python 命令行参数和getopt模块详解
FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...
随机推荐
- PHP原生分页的编写
<?php $link=mysql_connect("localhost","root","admin",'news')or die( ...
- MongoDB Shell 命令
更新列名 db.Stores.update({}, {$rename : {"StoreId" : "MetaId"}}, false, true) 查询长度 ...
- [BUAA软工]团队贡献分博客
Gamma阶段贡献分 Beta阶段贡献分 Alpha阶段贡献分 (博客最后部分) 复制过来: Alpha阶段 名字 角色 具体的可衡量的可验证的贡献 zpj PM,后端开发 博客X3 65 commi ...
- vscode配合less的编译
1.安装Easy LESS插件 2.打开settings.json,添加以下代码: "less.compile": { "sourceMap": true, & ...
- JS数据结构第一篇---算法之复杂度判断
1.算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作. 那么一个怎样的算法才能称得上是好算法,也就是说有没有什么标准来评判一个算法的好坏? 在此之 ...
- Maven设置MAVEN_OPTS环境变量
原文地址:https://blog.csdn.net/porsche_gt3rs/article/details/78787491 一 原因: 运行mvn命令实际是执行java命令,既然是运行java ...
- secondNameNode作用
在Hadoop中,有一些命名不好的模块,Secondary NameNode是其中之一.从它的名字上看,它给人的感觉就像是NameNode的备份.但它实际上却不是.很多Hadoop的初学者都很疑惑,S ...
- 在电脑上远程连接你的 云服务器( ECS)
在与服务器上一般安装的主流操作系统 linux 和 windowsServer linux一般都是centOs系列 这个主要是连接windowsServer 系统 用xshell ,win ...
- Qt SDK Issue cstdlib: fatal error: stdlib.h: No such file or directory
*To reproduce the issue, I've tried the following solutions which did not help:* *1) Globally remove ...
- Remote Desktop突然不能用了 “This could be due to CredSSP encryption oracle remediation”
一段时间没有用RDP去连远程的Windows主机,某一天突然发现用不了了. 错误信息如下: An authentication error has occurred. The function req ...