《Go程序设计语言》笔记(一)| echo

Go是一种开源的程序设计语言,它意在使得人们能够方便地构建简单、可靠、高效的软件。(来自Go官网golang.org)

类似UNIX echo命令的实现,它将命令行参数输出到一行:

_echo1.go_

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)
}

os.Args接收命令行参数,第一个值是程序名称,之后依次是传入的值。可以使用for range的方式遍历数组:

_echo2.go_

package main

import (
	"fmt"
	"os"
)

func main() {
	var s, sep string
	for _, arg := range os.Args {
		s += sep + arg
		sep = " "
	}
	fmt.Println(s)
}

Go不允许声明的变量未使用,所以使用空标志符,_(即下划线),可以忽略值。range有两个返回值,第一个是数组的索引,第二个是数组的值。

字符串使用+进行连接,旧的字符串会被回收,如果有大量的数据需要处理,代价就会比较大。一个简单和高效的方式是使用strings包中的Join函数:

_echo3.go_

package main

import (
	"fmt"
	"os"
	"strings"
)

func main() {
	fmt.Println(strings.Join(os.Args, " "))
}

最后,如果我们不关心格式,只是想看值,可以直接用Println函数输出:

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println(os.Args[1:])
}

os.Args[1:]表示数组索引从1到最后,包括最后,类似的os.Args[:2]表示数组索引从开始到2,不包括2,os.Args[2:3]表示数组索引从2到3,包括2不包括3,左闭右开。

练习 1.1:修改echo程序输出os.Args[0],即命令的名字。

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println(os.Args[0])
}

练习 1.2:修改echo程序,输出参数的索引和值,每行一个。

package main

import (
	"fmt"
	"os"
)

func main() {
	for index, arg := range os.Args {
		fmt.Println(index, arg)
	}
}

练习 1.3:尝试测量可能低效的程序和使用strings.Join的程序在执行时间上的差异。