Dunaevlad
@Dunaevlad

Как провести итерацию функций в map?

Задача, передать функции reFactory переменную типа стринг(key), с помощью которой мы получаем элементы(функции) нужного нам вида спорта. Получаем нужные функции, допустим Footbal, и проходимся по ним, закидывая в аргумент функции, переменную типа стринг(betType) и тогда функция возвращает нужный нам тип данных.

// Regular expression for betType.
type regp struct{}

// Func returns necessary methods-regexp
func reFactory(key, bet string, shortName interface{}) {
	regpfootball := &regp{}
	regphockey := &regp{}

	regpFactoryMap := map[string]interface{}{
		"Football": []func(string, interface{}){
			regpfootball.footballWinBets,
			regpfootball.footballTotalBets,
		},
		"Hockey": []func(string, interface{}){
			regphockey.hockeyWinBets,
		},
	}
	// Find necessary betType(send to all func - betType)
	functions := regpFactoryMap[key] // will show all func address
	for _, v := range functions {
		// error
	}
}
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
Dunaevlad
@Dunaevlad Автор вопроса
def := regpFactoryMap[key]
	for i := 0; i < len(def); i++ {
		def[i](bet, shortName)
	}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Старайтесь никогда не использовать пустой интерфейс (interface{}), только в самых крайних случаях.
Тут вам нужно просто изменить тип мапы на map[string][]func(string, interface{})

Не знаю, почему shortName у вас тоже имеет тип interface{}, его бы изменить на конкретный тип или конкретный интерфейс. Тогда код станет еще понятнее и удобнее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы