]> Cypherpunks repositories - gostls13.git/commitdiff
flag: add a Value example
authorTerin Stock <terinjokes@gmail.com>
Wed, 20 Jun 2018 21:00:04 +0000 (14:00 -0700)
committerIan Lance Taylor <iant@golang.org>
Thu, 21 Jun 2018 23:32:53 +0000 (23:32 +0000)
Change-Id: I579cc9f4f8e5be5fd6447a99614797ab7bc53611
Reviewed-on: https://go-review.googlesource.com/120175
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/flag/example_value_test.go [new file with mode: 0644]

diff --git a/src/flag/example_value_test.go b/src/flag/example_value_test.go
new file mode 100644 (file)
index 0000000..9d464c6
--- /dev/null
@@ -0,0 +1,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/"}
+}