github.com/dorkamotorka/go/src@v0.0.0-20230614113921-187095f0e316/flag/example_value_test.go (about)

     1  // Copyright 2018 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package flag_test
     6  
     7  import (
     8  	"flag"
     9  	"fmt"
    10  	"net/url"
    11  )
    12  
    13  type URLValue struct {
    14  	URL *url.URL
    15  }
    16  
    17  func (v URLValue) String() string {
    18  	if v.URL != nil {
    19  		return v.URL.String()
    20  	}
    21  	return ""
    22  }
    23  
    24  func (v URLValue) Set(s string) error {
    25  	if u, err := url.Parse(s); err != nil {
    26  		return err
    27  	} else {
    28  		*v.URL = *u
    29  	}
    30  	return nil
    31  }
    32  
    33  var u = &url.URL{}
    34  
    35  func ExampleValue() {
    36  	fs := flag.NewFlagSet("ExampleValue", flag.ExitOnError)
    37  	fs.Var(&URLValue{u}, "url", "URL to parse")
    38  
    39  	fs.Parse([]string{"-url", "https://golang.org/pkg/flag/"})
    40  	fmt.Printf(`{scheme: %q, host: %q, path: %q}`, u.Scheme, u.Host, u.Path)
    41  
    42  	// Output:
    43  	// {scheme: "https", host: "golang.org", path: "/pkg/flag/"}
    44  }