@Adrian В общем, да, но в этом случае команда является типом функции без параметров, поэтому использовать ее таким способом гораздо неудобнее.

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

//global variable
var cmds = []string {
    "create",
    "delete",
    "update",
}

func loop1() {

    actions := make(map[string]func())

    for _, cmd := range cmds {
        actions[cmd] = func() {
            fmt.Println(cmd)
        }
    }
    for _, action := range actions {
        action()
    }
}
func loop2() {

    actions := make(map[string]func())

    for i, cmd := range cmds {
        command := cmds[i]
        actions[cmd] = func() {
            fmt.Println(command)
        }
    }
    for _, action := range actions {
        action()
    }
}

Выход дляloop1() является

update
update
update

Выход дляloop2() является

delete
update
create

Я пошел смотреть наинтернет и прочитайте следующее

При определении диапазона по срезу для каждой итерации возвращаются два значения. Первый - это индекс, а второй - копия элемента с этим индексом.

Он говорит, что копия, значит ли это, что он возвращает копию строки, но это действительно указатель на переменнуюcmd? В этом случае любые ссылки наcmd будет к концу цикла все на самом деле ссылаться на последний элемент в массиве, например,update? Означает ли это, что элементы массива всегда должны указываться их индексом при использованииrange метод, и каков вариант использования возвращаемого элемента, поскольку он всегда обновляет указатель?

Ответы на вопрос(1)

Ваш ответ на вопрос