aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 44b4904f5eb109328b3945cfed6fc529d09d56b0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Opts

Opts is a simple Go library implementing unicode-aware getopt(3)- and
getopt_long(3) flag parsing in Go.  For details, check out the godoc
documentation.

Note that unlike the `getopt()` C function, the ‘:’ and ‘?’ flags are not
returned on errors — the errors are instead returned via the `err` return value
of `opts.Get()` and `opts.GetLong()`.  Additionally, a leading ‘:’ in the
opt-string provided to `opts.Get()` is not supported; you are responsible for
your own I/O.

## Example Usage

The following demonstrates an example usage of the `opts.Get()` function:

```go
package main

import (
    "fmt"
    "os"

    "git.sr.ht/~mango/opts"
)

func usage() {
    fmt.Fprintf(os.Stderr, "Usage: %s [-ßλ] [-a arg]\n", os.Args[0])
    os.Exit(1)
}

func main() {
    flags, optind, err := opts.Get(os.Args, "a:ßλ")
    if err != nil {
        fmt.Fprintf(os.Stderr, "%s: %s\n", os.Args[0], err)
        usage()
    }

    for _, opt := range opts {
        switch opt.Key {
        case 'a':
            fmt.Println("-a given with argument", opt.Value)
        case 'ß':
            fmt.Println("-ß given")
        case 'λ':
            fmt.Println("-λ given")
        }
    }

    // The remaining arguments
    rest := os.Args[optind:]
}
```