Это невозможно в Go, так как это скомпилированный и статически типизированный язык. Компилятор должен знать во время компиляции имена и типы переменных (*). То, что вы спрашиваете, это именование переменных во время выполнения, которое не может работать. Тем не менее, крайне маловероятно, что вам это действительно нужно на практике. Карты могут предоставлять аналогичные возможности:
m := make(map[string]string)
m["key"] = "value"
И вы можете создать любой из них во время выполнения. Немного адаптируя ваш пример:
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
m := make(map[string]string)
currentMonth := time.Now().Month()
currentYear := time.Now().Year()
var month = int(currentMonth)
var currentDate = strings.Join([]string{strconv.Itoa(currentYear), "-", strconv.Itoa(month)}, "")
m["key"+currentDate] = "value"
fmt.Println(m)
}
Распечатывается:
map[key2019-1:value]
(*) За некоторыми исключениями, которые не относятся к данному конкретному обсуждению.