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
| // Copyright 2018 The Go Authors. All rights reserved.
| // Use of this source code is governed by a BSD-style
| // license that can be found in the LICENSE file.
|
| package flag_test
|
| import (
| "flag"
| "fmt"
| "net/url"
| )
|
| type URLValue struct {
| URL *url.URL
| }
|
| func (v URLValue) String() string {
| if v.URL != nil {
| return v.URL.String()
| }
| return ""
| }
|
| func (v URLValue) Set(s string) error {
| if u, err := url.Parse(s); err != nil {
| return err
| } else {
| *v.URL = *u
| }
| return nil
| }
|
| var u = &url.URL{}
|
| func ExampleValue() {
| fs := flag.NewFlagSet("ExampleValue", flag.ExitOnError)
| fs.Var(&URLValue{u}, "url", "URL to parse")
|
| fs.Parse([]string{"-url", "https://golang.org/pkg/flag/"})
| fmt.Printf(`{scheme: %q, host: %q, path: %q}`, u.Scheme, u.Host, u.Path)
|
| // Output:
| // {scheme: "https", host: "golang.org", path: "/pkg/flag/"}
| }
|
|