Command-line Args


Command-line args are stored as a slice in os.Args. The first argument in list is program itself.

num_args := len(os.Args)

You can check to see if any command-line arguments were passed in

if num_args < 2 {
	fmt.Println(">> No args passed in")

Flag Library

Use the flag standard library to parse command-line arguments. The flag library parses parameters passed in and flags for invalid types, invalud flags, and handles most needs for creating a command-line program.

var s string
flag.StringVar(&s, "str", "default value", "text description")


$ ./program -str "Hello"

Full Example

Here is a full example program showing how to use command-line arguments and flags in Go

package main

import (

// global vars
var str string
var num int
var help bool

func main() {

	// define flags
	flag.StringVar(&str, "str", "default value", "text description")
	flag.IntVar(&num, "num", 5, "text description")
	flag.BoolVar(&help, "help", false, "Display Help")

	// parse

	// check if help was called explicitly
	if help {
		fmt.Println(">> Display help screen")

	// See values assigned
	fmt.Println(">> String:", str)
	fmt.Println(">> Number:", num)

	// last command-line argument
	fmt.Println(">> Last Item:", os.Args[num_args-1])

	// the os.Args will include flags for example
	// go run command-line-args.go --str=Foo filename
	// os.Args[1] = "--str=Foo"

	// If you have flags and want just the arguments
	// then after calling flag.Parse() you can call
	// flag.Args which store only the args
	args := flag.Args()
	if len(args) > 0 {
		fmt.Println(">> Flag Arg:", args[0])


Run with different parameters

$ go run command-line.go
>> No args passed in
>> String: default value
>> Number: 5
>> Last Item: command-line.go

$ go run command-line.go --str=Foo --num=8 filename
>> String: Foo
>> Number: 8
>> Last Item: filename
>> Flag Arg: filename