Last active
February 7, 2022 06:18
-
-
Save yakuter/e77713cbfa22a7e13c1fb3adae911261 to your computer and use it in GitHub Desktop.
A nice args (arguments) interface for golang projects
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment