栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Go程序设计语言 1.2 命令行参数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go程序设计语言 1.2 命令行参数

大部分程序处理输入然后产生输出,这就是关于计算的大致定义。但是程序怎样获取数据的输入呢?一些程序自己生成数据,更多的时候,输入来自一个外部源:文件、网络连接、其他程序的输出、键盘、命令行参数等。
os包提供一些函数和变量,以与平台无关的方式和操作系统打交道。命令行参数以os包中Args名字的变量供程序访问,在os包外面,使用os.Args这个名字。

变量os.Args是一个字符串slice。slice是Go中的基础概念,很快我们将讨论到它。现在只需理解它是一个动态容量的顺序数组s,可以通过s[i]来访问单个元素,通过s[m:n]来访问一段连续子区间,数组长度用len(s)表示。与大部分编程语言一样,在Go中,所有的索引使用半开区间,即包含第一个索引,不包含最后一个索引,因为这样逻辑比较简单。例如,slice s[m:n],其中,0<=m<=n<=len(s),包含n-m个元素。

os.Args的第一个元素是os.Args,它是命令本身的名字;;另外的元素是程序开始执行时的参数。表达式s[m:n]表示一个从第m个到第n-1个元素的slice,所以下一个示例中slice需要的元素是os.Args[1:len(os.Args)]。如果m或n缺失,默认分别是0或len(s),所以我们可以将期望的slice简写为os.Args[1:]

这里有一个UNIX echo命令的实现,它将命令行参数输出到一行。该实现导入两个包,使用由圆括号括起来的列表,而不是独立的import声明。两者都是合法的,但为了方便起见,我们使用列表的方式。导入的顺序是没有关系的,gofmt工具会将其按照字母顺序表进行排序(当一个示例有几个版本时,通常给它们编号以区分出当前讨论的版本)
gop1.io/ch1/echo1

// echo1输出其命令行参数
package main

import (
	"fmt"
	"os"
)

func main() {
	var s, sep string
	for i := 1; i < len(os.Args); i++ {
		s += sep + os.Args[i]
		sep = " "
	}
	fmt.Println(s)
}

注释以//开头。所有以//开头的文本是给程序员看的注释,编译器将会忽略它们。习惯上,在一个包声明前,使用注释对其进行描述;对于main包。注释是一个或多个完整的句子,用来对这个程序进行整体概括。

var关键字声明了两个string类型的变量s和sep。变量可以在声明的时候初始化。如果变量没有明确地初始化,它将隐式地初始化为这个类型的空值。例如,对于数字初始化结果是0,对于字符串是空字符串""。在这个示例中,s和sep隐式初始化为空字符串。第2章将讨论变量和声明。

对于数字,Go提供常规的算术和逻辑操作符。当应用于字符串时,+操作符对字符串的值进行追加操作,所以表达式

seq + os.Args[i]

表示将sep和os.Args[i]追加到一起。程序中使用的语句

s += seq + os.Args[i]

是一个赋值语句,将sep和os.Args[i]追加到旧的s上面,并且重新赋值给s,它等价于下面的语句:

s = s + sep + os.Args[i]

操作符+=是一个赋值操作符。每一个算术和逻辑操作符(例如+或者*)都有一个对应的赋值操作符。

echo程序会循环每次输出,但是这个版本中我们通过反复追加来构建一个字符串。字符串s一开始为空字符串"",每一次循环追加一些文本。在第一次迭代后,一个空格被插入,这样当结束时,每个参数之间都有一个空格。这是一个二次过程,如果参数数量很大成本会比较高,不过对于echo程序还好。本章和下一章会展示几个改进版本,它们会逐步处理掉低效的地方。

循环的索引变量i在for循环开始处声明。:=符号用于短变量声明,

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885129.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号