记得最早在学校机房学习 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. Vue Echarts 饼图设置默认选中一个

    Vue Echarts 饼图设置默认选中一个 myChart.setOption(data) // data伟echarts所需要传入的参数,就是配置参数最多的那个玩意 myChart.dispatc ...

  2. 安装Ruby 2.3.0

    安装最新的redis集群需要用到的rb脚本要ruby2.3.0版本,centos7默认的是2.0.0,很显然报错不行,所以安装呗,使用rvm安装,安装步骤如下: yum -y install curl ...

  3. python 项目实战之logging日志打印

    官网介绍:https://docs.python.org/2/library/logging.html 一. 基础使用 1.1 logging使用场景 日志是什么?这个不用多解释.百分之九十的程序都需 ...

  4. Gamma阶段第十次scrum meeting

    每日任务内容 队员 昨日完成任务 明日要完成的任务 张圆宁 #91 用户体验与优化https://github.com/rRetr0Git/rateMyCourse/issues/91(持续完成) # ...

  5. Web Api 实现删除功能接口

    删除数据 [HttpDelete] public ResultModel DeleteDataById(int id) { var result = new ResultModel(); //实例化数 ...

  6. AKKA 常见异常

    一,scala 相关类找不到问题 AKKA 包的版本命名规则 compile("com.typesafe.akka:akka-remote_2.13:2.5.23") 注意: co ...

  7. laravel门面与服务提供者区别

    laravel门面模式与服务提供者区别 以 Laravel 自带的文件系统为例,在 config/app.php 的配置文件的 providers 数组中,注册了一个服务提供者: Illuminate ...

  8. python实现双向循环链表

    参考https://www.cnblogs.com/symkmk123/p/9693872.html#4080149 # -*- coding:utf-8 -*- # __author__ :kusy ...

  9. Github 上的个人项目开源心得

    原文链接 https://elfgzp.cn/2019/12/09/gortal-site-project 由于最近在 Github 发了一个个人开源项目 - 「gortal」一个使用 Go 语言开发 ...

  10. HDU校赛 | 2019 Multi-University Training Contest 6

    2019 Multi-University Training Contest 6 http://acm.hdu.edu.cn/contests/contest_show.php?cid=853 100 ...