CodeBlanks Logo Icon CodeBlanks

os.Args

Learn to access arguments directly with os.Args.

os.Args

os.Args is a []string containing all arguments given at startup, raw. os.Args[0] is the program itself:

// ./selam Ada Can
for i, a := range os.Args {
    fmt.Println(i, a)
}
// 0 ./selam
// 1 Ada
// 2 Can

In very simple tools it can be used directly without the flag package; but check len(os.Args) first to avoid out-of-range access.

Environment variables and stdin

A command-line tool has three input sources: arguments (os.Args), environment variables (os.Getenv, os.LookupEnv) and standard input. Good tools read stdin when no file name is given, so they can be combined with pipes:

var r io.Reader = os.Stdin
if len(os.Args) > 1 {
    f, err := os.Open(os.Args[1])
    if err != nil { log.Fatal(err) }
    defer f.Close()
    r = f
}

cat log.txt | ./say and ./say log.txt give the same result.

Practice Greet the arguments

Write selam(args []string) []string: args[0] is the program name; if the length is below 2 return []string{"kullanım: selam AD..."}, otherwise "Merhaba " + ad for each name. Call it with []string{"selam", "Ada", "Can"} and print every line.

Starter code

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Sample solution

main.go
package main

import "fmt"

func selam(args []string) []string {
    if len(args) < 2 {
        return []string{"kullanım: selam AD..."}
    }
    var out []string
    for _, ad := range args[1:] {
        out = append(out, "Merhaba "+ad)
    }
    return out
}

func main() {
    for _, s := range selam([]string{"selam", "Ada", "Can"}) {
        fmt.Println(s)
    }
}

Expected output

Merhaba Ada
Merhaba Can

Questions and answers

Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.

1 If <code>os.Args[1]</code> is read in a program run with no arguments, what happens?

  • An empty string is returned
  • nil is returned
  • The program name is returned
  • An index out of range panic Correct answer

Explanation: os.Args contains only [0]; accessing a missing index panics at run time.

2 Length check

Question
if len(os.Args) ____ 2 {
    fmt.Println("kullanım: selam AD")
    return
}
Answer
if len(os.Args) < 2 {
    fmt.Println("kullanım: selam AD")
    return
}

Explanation: If at least one argument is required, the usage message is shown when the length is less than 2.

3 Input source

Term Meaning
os.Args Command line
os.Getenv Environment variable
os.LookupEnv Is it set?
os.Stdin Pipe / keyboard

All lessons in Intermediate