実現したいこと
実現したいのは文字列の入力に応じて関数を分岐する処理の実装です
仮に以下のように、関数があったとして、入力に応じて実行する関数を分岐することを考えます。
この方法だと確かに分岐が行えていますが、入力のパターンが100などになるとswitch文がとてつもないことになり大変です。
go
1 2package main 3 4import "fmt" 5 6func xxx1() { 7 fmt.Println("pattern1") 8} 9 10func yyy() { 11 fmt.Println("pattern2") 12} 13 14func zzz() { 15 fmt.Println("pattern3") 16} 17 18func main() { 19 var str string 20 fmt.Scan(&str) 21 22 // strが"xxx"の場合はxxx1()を実行 23 // strが"yyy"の場合はyyy()を実行 24 // strが"zzz"の場合はzzz()を実行 25 26 switch str { 27 case "xxx": 28 xxx1() 29 case "yyy": 30 yyy() 31 case "zzz": 32 zzz() 33 } 34 35} 36
そのため、何か他の方法を利用してプログラムの分岐を行いたいと考えているのですが、上記のプログラムより良いものはあったりしますでしょうか?
試したこと
構造体を利用して実装するのを考えいました
go
1type Func func() interface{} 2 3type Service struct { 4 Test Func 5} 6 7var ( 8 httpd = &Service{ 9 Test: func() interface{} { 10 return nil 11 }, 12 } 13) 14 15 16var ( 17 List = map[string]Service{ 18 "httpd": *httpd, 19 } 20)
上記のようにすることで実行するときはList["string"].Testという形で実行できます。ただ、これでも少しブサイクな実装だと感じています。正しい実装方法があれば教えていただきたいです
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。