mattn さんに教えてもらった。 いつもお世話になってて感謝しかない。
package main import "flag" import "strings" type myDog []string func (dog *myDog) String() string { return strings.Join(([]string)(*dog), ",") } func (dog *myDog) Set(value string) error { *dog = append(*dog, value) return nil } func main() { var dog myDog flag.Var(&dog, "dog", "犬") flag.Parse() }
package main import ( "flag" "fmt" ) type myDog []bool func (dog *myDog) String() string { return fmt.Sprint(([]bool)(*dog)) } func (dog *myDog) Set(value string) error { *dog = append(*dog, true) return nil } func (dog *myDog) IsBoolFlag() bool { return true } func main() { var dog myDog flag.Var(&dog, "v", "犬") flag.Parse() fmt.Printf("%d dog\n", len(dog)) }
Go は type で既存の型を特別な型として定義してメソッド生やせたりするのが面白いですね。