记得最早在学校机房学习 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: 打印命令行参数的更多相关文章

  1. Golang: Cobra命令行参数库的使用

    将cobra下载到 $GOPATH,用命令: go get -v github.com/spf13/cobra/cobra 然后使用 go install github.com/spf13/cobra ...

  2. nginx 支持的命令行参数

    Command-line parameters 命令行参数 nginx supports the following command-line parameters: nginx支持以下命令行参数 - ...

  3. nginx使用手册--nginx的命令行参数

    nginx的命令行参数 -? 或者 -h 打印命令行参数帮助信息 -c file 为 Nginx 指定一个配置文件,来代替缺省的. -t 不运行,而仅仅测试配置文件.nginx 将检查配置文件的语法的 ...

  4. golang命令行参数

    os.Args获取命令行参数 os.Args是一个srting的切片,用来存储所有的命令行参数 package main import ( "fmt" "os" ...

  5. golang学习笔记 ---命令行参数

    os 包以跨平台的方式,提供了一些与操作系统交互的函数和变量.程序的命令行参数可从os包的Args变量获取:os包外部使用os.Args访问该变量. os.Args变量是一个字符串(string)的切 ...

  6. [日常] Go语言圣经-命令行参数

    1.编译 go build hello.go 2.go get gopl.io/ch1/helloworld 命令,就会从网上获取代码,并放到对应目录中 下载的代码会放在$GOPATH/src/gop ...

  7. python处理命令行参数

    直接从命令行执行py文件的时候如果带有参数,如何获取这些参数,如何解析? http://blog.chinaunix.net/uid-20786165-id-3182268.html sys.argv ...

  8. .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]

    较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参 ...

  9. [转]Python 命令行参数和getopt模块详解

    FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...

随机推荐

  1. css3有哪些新特性?

    新选择器,属性选择器.伪类选择器.层次选择器... 圆角属性border-radius font-face加载服务器端的字体 多列布局column 阴影shadow 弹性盒flex 过渡transit ...

  2. BootStrap Table 合并单元格

    为了更直观展示表格的一大堆乱七八糟的数据,合并单元格就派上用场: 效果: 贴上JSON数据(后台查询数据一定要对合并字段排序): [ { "city": "广州市&quo ...

  3. SpringBoot之邮件服务

    springboot 邮件服务 今天在看网上学习微服务的时候顺遍看到了一些关于springboot的文章,写的springboot拓展功能就顺遍学习了一下,接下来给大家分享一下springboot封装 ...

  4. JNA 调用操作系统函数 和 系统调用

    linux系统调用syscall 表:https://filippo.io/linux-syscall-table/ Linux Namespace 特性简要介绍 原文:https://iliangq ...

  5. Python 的 Pandas 对矩阵的行进行求和

    Python 的 Pandas 对矩阵的行进行求和: 若使用 df.apply(sum) 方法的话,只能对矩阵的列进行求和,要对矩阵的行求和,可以先将矩阵转置,然后应用 df.apply(sum) 即 ...

  6. Alpha冲刺(8/10)——2019.4.30

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...

  7. angular get 数据请求

    数据请求 get 新建一个服务 1. ng g service services /+服务名  eg:ng g service services/player 在此服务中进行设置 引入自带组件以及注册 ...

  8. 镜像仓库 Nexus 3.18.1

    说明:Nexus是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布. 一.安装jdk 1 ...

  9. CentOS7 下 yum 安装 Docker CE

    前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker 官网有安装步骤,本文只是记录 ...

  10. 【转帖】 PM RD QA OP

    From 百度知道 一.PM: Product Manager,产品经理,又称品牌经理(Brand Manager).举凡产品从创意到上市,所有相关的研发.调研.生产.编预算.广告.促销活动等等,都由 ...