记得最早在学校机房学习 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. NetworkManager需要与不需要

    需要: 1.nmcli配置网络 不需要: 1.   ifcfg-eth1:0(网卡的子接口配置文件)生效

  2. django -- 母版继承

    csrf_token 在之前我们提交post请求的时候,都是在setting.py文件里注释掉了 'django.middleware.csrf.CsrfViewMiddleware' 这一行,这是因 ...

  3. mac 下使用nasm

    #安装nasm brew install nasm #创建文件 vi hello.asm 写入如下内容 msg: db "hello world!", 0x0a len: equ ...

  4. Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡

    数据库准备 建立数据库 renren_fast ,然后运行renrenfast项目中的db文件夹内的脚本 -- 菜单 CREATE TABLE `sys_menu` ( `menu_id` bigin ...

  5. Python【每日一问】29

    问: [基础题]:给一个不多于 5 位的正整数,要求:一.求它是几位数,二.逆序印出各位数字[提高题]:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加 ...

  6. Python3+selenium 报错处理:“selenium.common.exceptions.NoAlertPresentException: Message: No alert is active”

    一.说明 在使用python3+selenium写自动升级程序的时侯,碰到一个弹出对话框需要点击确认的场景.弹出的对话框如下图所示. 对于弹框各种资料都说通过switch_to.alert属性获取对话 ...

  7. 【题解】Editor [HDU4699]

    [题解]Editor [HDU4699] 传送: \(Editor\) \([HDU4699]\) [题目描述] 有一个维护整数序列的强大编辑器,初始状态为空,下面提供五种不同的操作,给出的总操作次数 ...

  8. SQL Server的唯一键和唯一索引会将空值(NULL)也算作重复值

    我们先在SQL Server数据库中,建立一张Students表: CREATE TABLE [dbo].[Students]( ,) NOT NULL, ) NULL, ) NULL, [Age] ...

  9. Nginx配置gzip.md

    参考 入门系列之在Nginx配置Gzip gzip是一种流行的数据压缩程序.您可以使用gzip压缩Nginx实时文件.这些文件在检索时由支持它的浏览器解压缩,好处是web服务器和浏览器之间传输的数据量 ...

  10. Wireshark教程之二:Wireshark捕获数据分析

    使用 Wireshark 选择需要抓包的网络方式,并设置过滤器条件,当有数据通信后即可抓到对应的数据包,这里将分析其每一帧数据包的结构. 以HTTP协议为例,一帧数据包一般包括以下几个部分: Fram ...