os.Args

Индексация в Go

Индексация в Go использует полуоткрытые интервалы, которые включают первый индекс, но исплючают последний.
То есть, срез s[m:n], где 0 <= m <= n <= len(s), содержит n-m элементов.

Usage

Для перечисления всех аргументов (кроме имени программы os.Args[0], естественно), нужна конструкция:

os.Args[1:len(os.Args)]

И если опустить значение m или n — подставятся дефолтные значения — 0 или len(s) соответственно. Таким образом можно сократить запись:

os.Args[1:]

Newbie solutions

https://github.com/adonovan/gopl.io/blob/master/ch1/echo1/main.go
// Неявная инициализация строк s и sep
var s, sep string
for i := 1; i < len(os.Args); i++ {
    s += sep + os.Args[i]
    sep = " "
}
fmt.Println(s)

Тот же пример с range и blank identifier:

https://github.com/adonovan/gopl.io/blob/master/ch1/echo2/main.go
var s, sep string
for _, arg := range os.Args[1:] {
    s += sep + arg
    sep = " "
}
fmt.Println(s)

Вывод одинаковый:

stdout
# go run main.go idk 2 CROSS
idk 2 CROSS

Best practices

Использование функции Join из пакета strings:

https://github.com/adonovan/gopl.io/blob/master/ch1/echo3/main.go
fmt.Println(strings.Join(os.Args[1:], " "))

👀 Естественно, можно просто вывести значения без форматирования с помощью fmt.Println(os.Args[1:]).


Соус: Книга Язык программирования Go Глава 1. Учебник 1.2. Аргументы командной строки