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

В языке программирования Go функции не могут быть использованы напрямую в качестве значений в структурах данных, включая map. Однако вы можете достичь аналогичного результата, используя интерфейсы в Go.

Вместо того, чтобы хранить функции в map, вам нужно создать интерфейс, который определяет функциональность, и реализовать этот интерфейс в структурах, которые представляют вашу функциональность. Затем вы можете использовать этот интерфейс в map для выполнения итераций.

Давайте рассмотрим пример. Предположим, у нас есть функция ComputeSquare, которая принимает число и возвращает его квадрат. Мы хотим хранить несколько функций в map и выполнить итерацию по ним:

package main

import (
	"fmt"
)

type Mapper interface {
	Map(int) int
}

type Square struct{}

func (s Square) Map(x int) int {
	return x * x
}

type Cube struct{}

func (c Cube) Map(x int) int {
	return x * x * x
}

func main() {
	funcMap := make(map[string]Mapper)
	funcMap["square"] = Square{}
	funcMap["cube"] = Cube{}

	x := 2

	for name, mapper := range funcMap {
		result := mapper.Map(x)
		fmt.Printf("Function %s applied to %d: %dn", name, x, result)
	}
}

В этом примере мы определяем интерфейс Mapper, который определяет метод Map, который принимает целое число и возвращает целое число. Затем мы создаем две структуры, Square и Cube, которые реализуют этот интерфейс и представляют функции вычисления квадрата и куба числа соответственно.

Затем мы создаем map funcMap и добавляем наши функции в него, используя ключи "square" и "cube". В основной функции мы выполняем итерацию по этому map и применяем каждую функцию к значению x и выводим результат.

Таким образом, используя интерфейсы и структуры, вы можете эмулировать итерацию функций в map в языке Go.