os库

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println("os.Args")
}
Argsos.Args

flag包

package main

import (
	"flag"
	"fmt"
)

func main() {
	name := flag.String("name", "golang", "the name")
	var year int
	flag.IntVar(&year, "year", 2009, "the year")

	flag.Parse()

	fmt.Println("name:", *name)
	fmt.Println("year:", year)
}

执行go run test.go,会得到

name: golang
year: 2009

当执行go run test.go -name=“benben” -year=2015。将会输出

name: benben
year: 2015

常用函数解析

flag.String(name string, value string, usage string)
func String(name string, value string, usage string) *string {
	return CommandLine.String(name, value, usage)
}

func (f *FlagSet) String(name string, value string, usage string) *string {
	p := new(string)
	f.StringVar(p, name, value, usage)
	return p
}

func (f *FlagSet) StringVar(p *string, name string, value string, usage string) {
	f.Var(newStringValue(value, p), name, usage)
}

func (f *FlagSet) Var(value Value, name string, usage string) {
	// Remember the default value as a string; it won't change.
	flag := &Flag{name, usage, value, value.String()}
	_, alreadythere := f.formal[name]
	if alreadythere {
		var msg string
		if f.name == "" {
			msg = fmt.Sprintf("flag redefined: %s", name)
		} else {
			msg = fmt.Sprintf("%s flag redefined: %s", f.name, name)
		}
		fmt.Fprintln(f.Output(), msg)
		panic(msg) // Happens only if flags are declared with identical names
	}
	if f.formal == nil {
		f.formal = make(map[string]*Flag)
	}
	f.formal[name] = flag
}
flag.StringVar(p *string, name string, value string, usage string)
func StringVar(p *string, name string, value string, usage string) {
	CommandLine.Var(new StringValue(value, p), name, usage)
}

func (f *FlagSet) Var(value Value, name string, usage string) {
	// Remember the default value as a string; it won't change.
	flag := &Flag{name, usage, value, value.String()}
	_, alreadythere := f.formal[name]
	if alreadythere {
		var msg string
		if f.name == "" {
			msg = fmt.Sprintf("flag redefined: %s", name)
		} else {
			msg = fmt.Sprintf("%s flag redefined: %s", f.name, name)
		}
		fmt.Fprintln(f.Output(), msg)
		panic(msg) // Happens only if flags are declared with identical names
	}
	if f.formal == nil {
		f.formal = make(map[string]*Flag)
	}
	f.formal[name] = flag
}
flag.Parse()os.Args[1:]
func Parse() {
	CommandLine.Parse(os.Args[1:])
}