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 5package flag_test 6 7import ( 8 "flag" 9 "fmt" 10 "net/url" 11) 12 13type URLValue struct { 14 URL *url.URL 15} 16 17func (v URLValue) String() string { 18 if v.URL != nil { 19 return v.URL.String() 20 } 21 return "" 22} 23 24func (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 33var u = &url.URL{} 34 35func 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} 45