os.Args
- Go course
- Intermediate
- Lesson 75/80
- 4 min
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 CanIn 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
package main
import "fmt"
func main() {
// buraya yaz
}Sample solution
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
if len(os.Args) ____ 2 {
fmt.Println("kullanım: selam AD")
return
}
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 |