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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| package main
import ( "fmt" "github.com/AlekSi/pointer" "github.com/spf13/cobra" "gopkg.in/yaml.v3" "log" "os" "time" )
var root = &cobra.Command{ Use: "flag", Short: "A pointer flag test", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { run() }, }
func main() { flags := root.Flags() flags.SortFlags = false
flags.VarPF(NewBoolPtrValue(&config1.FBoolPtr, pointer.ToBool(false)), "fBoolPtr1", "", "flag bool ptr1").NoOptDefVal = "true" flags.VarP(NewIntPtrValue(&config1.FIntPtr, pointer.ToInt(134)), "fIntPtr1", "", "flag int ptr1") flags.VarP(NewStringPtrValue(&config1.FStringPtr, pointer.ToString("string-xxx")), "fStringPtr1", "", "flag string ptr1") flags.VarP(NewDurationPtrValue(&config1.FDurationPtr, ToDuration(time.Duration(1*time.Minute))), "fDurationPtr1", "", "flag duration ptr1")
flags.VarPF(NewBoolPtrValue(&config0.FBoolPtr, nil), "fBoolPtr0", "", "flag bool ptr0").NoOptDefVal = "true" flags.VarP(NewIntPtrValue(&config0.FIntPtr, nil), "fIntPtr0", "", "flag int ptr0") flags.VarP(NewStringPtrValue(&config0.FStringPtr, nil), "fStringPtr0", "", "flag string ptr0") flags.VarP(NewDurationPtrValue(&config0.FDurationPtr, nil), "fDurationPtr0", "", "flag duration ptr0")
AddFlag(flags, &config2.FBoolPtr, "fBoolPtr2", "", "flag bool ptr2") AddFlag(flags, &config2.FIntPtr, "fIntPtr2", "", "flag int ptr2") AddFlag(flags, &config2.FStringPtr, "fStringPtr2", "", "flag string ptr2") AddFlag(flags, &config2.FDurationPtr, "fDurationPtr2", "", "flag duration ptr2") AddFlag(flags, &config2.FStringSlice, "fStringSlice2", "", "flag string slice2") AddFlag(flags, &config2.FStringMap, "fStringMap2", "", "flag string map2")
AddFlag2(flags, &config3.FBoolPtr, "fBoolPtr3", "", nil, "flag bool ptr3") AddFlag2(flags, &config3.FIntPtr, "fIntPtr3", "", 1234, "flag int ptr3") AddFlag2(flags, &config3.FStringPtr, "fStringPtr3", "", nil, "flag string ptr3") AddFlag2(flags, &config3.FDurationPtr, "fDurationPtr3", "", nil, "flag duration ptr3") AddFlag2(flags, &config3.FStringSlice, "fStringSlice3", "", []string{}, "flag string slice3") AddFlag2(flags, &config3.FStringMap, "fStringMap3", "", map[string]string{"1": "1"}, "flag string map3")
if err := root.Execute(); err != nil { os.Exit(1) } os.Exit(0) }
type Config struct { FBoolPtr *bool `yaml:"fBoolPtr,omitempty"` FIntPtr *int `yaml:"fIntPtr,omitempty"` FStringPtr *string `yaml:"fStringPtr,omitempty"` FDurationPtr *time.Duration `yaml:"fDurationPtr,omitempty"` FStringSlice []string `yaml:"fStringSlice,omitempty"` FStringMap map[string]string `yaml:"fStringMap,omitempty"` }
var config0 Config var config1 Config var config2 Config var config3 Config
func run() { fmt.Println("-- config0:") d0, err := yaml.Marshal(config0) if err != nil { log.Fatal("failed to marshal") } fmt.Println(string(d0))
fmt.Println("-- config1:") d1, err := yaml.Marshal(config1) if err != nil { log.Fatal("failed to marshal") } fmt.Println(string(d1))
fmt.Println("-- config2:") d2, err := yaml.Marshal(config2) if err != nil { log.Fatal("failed to marshal") } fmt.Println(string(d2))
fmt.Println("-- config3:") d3, err := yaml.Marshal(config3) if err != nil { log.Fatal("failed to marshal") } fmt.Println(string(d3)) }
|