liyujie
2025-08-28 d9927380ed7c8366f762049be9f3fee225860833
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/"}
}