package cli type Args interface { // Get returns the nth argument, or else a blank string Get(n int) string // First returns the first argument, or else a blank string First() string // Tail returns the rest of the arguments (not the first one) // or else an empty string slice Tail() []string // Len returns the length of the wrapped slice Len() int // Present checks if there are any arguments present Present() bool // Slice returns a copy of the internal slice Slice() []string } type args []string func (a *args) Get(n int) string { if len(*a) > n { return (*a)[n] } return "" } func (a *args) First() string { return a.Get(0) } func (a *args) Tail() []string { if a.Len() >= 2 { tail := []string((*a)[1:]) ret := make([]string, len(tail)) copy(ret, tail) return ret } return []string{} } func (a *args) Len() int { return len(*a) } func (a *args) Present() bool { return a.Len() != 0 } func (a *args) Slice() []string { ret := make([]string, len(*a)) copy(ret, *a) return ret }