Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 43 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,13 @@ Documentation can be found at [Godoc](https://godoc.org/github.com/cosiner/flag)
# Example
## Flags
```Go
package flag
package main

import "fmt"
import (
"fmt"

flag "github.com/cosiner/flag"
)

type Tar struct {
GZ bool `names:"-z, --gz" usage:"gzip format"`
Expand All @@ -73,7 +77,7 @@ type Tar struct {
SourceFiles []string `args:"true"`
}

func (t *Tar) Metadata() map[string]Flag {
func (t *Tar) Metadata() map[string]flag.Flag {
const (
usage = "tar is a tool for manipulate tape archives."
version = `
Expand All @@ -87,7 +91,7 @@ func (t *Tar) Metadata() map[string]Flag {
cpio, ar, and shar archives.
`
)
return map[string]Flag{
return map[string]flag.Flag{
"": {
Usage: usage,
Version: version,
Expand All @@ -99,22 +103,21 @@ func (t *Tar) Metadata() map[string]Flag {
}
}

func ExampleFlagSet_ParseStruct() {
func main() {
var tar Tar

NewFlagSet(Flag{}).ParseStruct(&tar, "tar", "-zcf", "a.tgz", "a.go", "b.go")
flag.NewFlagSet(flag.Flag{}).ParseStruct(&tar, os.Args...)
fmt.Println(tar.GZ)
fmt.Println(tar.Create)
fmt.Println(tar.File)
fmt.Println(tar.SourceFiles)

// Output:
// Output for `$ go build -o "tar" . && ./tar -zcf a.tgz a.go b.go`:
// true
// true
// a.tgz
// [a.go b.go]
}

```
## Help message
```
Expand Down Expand Up @@ -146,6 +149,14 @@ Flags:

## FlagSet
```Go
package main

import (
"fmt"

flag "github.com/cosiner/flag"
)


type GoCmd struct {
Build struct {
Expand All @@ -160,25 +171,10 @@ type GoCmd struct {
Clean struct {
Enable bool
} `usage:"remove object files"`
Doc struct {
Enable bool
} `usage:"show documentation for package or symbol"`
Env struct {
Enable bool
} `usage:"print Go environment information"`
Bug struct {
Enable bool
} `usage:"start a bug report"`
Fix struct {
Enable bool
} `usage:"run go tool fix on packages"`
Fmt struct {
Enable bool
} `usage:"run gofmt on package sources"`
}

func (*GoCmd) Metadata() map[string]Flag {
return map[string]Flag{
func (*GoCmd) Metadata() map[string]flag.Flag {
return map[string]flag.Flag{
"": {
Usage: "Go is a tool for managing Go source code.",
Arglist: "command [argument]",
Expand All @@ -196,16 +192,31 @@ func (*GoCmd) Metadata() map[string]Flag {
}
}

func TestSubset(t *testing.T) {
func main() {
var g GoCmd

set := NewFlagSet(Flag{})
set.StructFlags(&g)
set.Help(false)
fmt.Println()
build, _ := set.FindSubset("build")
build.Help(false)
set := flag.NewFlagSet(flag.Flag{})
set.ParseStruct(&g, os.Args...)

if g.Build.Enable {
if len(g.Build.Packages) == 0 {
fmt.Fprintln(os.Stderr, "Error: you should at least specify one package")
fmt.Println("")
build, _ := set.FindSubset("build")
build.Help(false) // display usage information for the "go build" command only
} else {
fmt.Println("Going to build with the following parameters:")
fmt.Println(g.Build)
}
} else if g.Clean.Enable {
fmt.Println("Going to clean with the following parameters:")
fmt.Println(g.Clean)
} else {
set.Help(false) // display usage information, with list of supported commands
}
}

// Test with `$ go build -o "go" . && ./go --help`
```
##Help Message
```
Expand Down