我想通过与当前日期连接来创建变量名,并为创建的变量名提供一个值。我的变量名应类似于“ Key-2019-01” ,以便我可以将值存储为 var Key-2019-01 =“ yes”
我已经尝试过以下方法。
package main
import (
"fmt"
"time"
"strconv"
"strings"
)
func main() {
currentMonth := time.Now().Month()
currentYear := time.Now().Year()
var month = int(currentMonth)
var currentDate = strings.Join([]string{strconv.Itoa(currentYear), "-", strconv.Itoa(month)}, "")
var "Key",currentDate string
value, err := json.Marshal("yes")
stub.PutState(("Key", currentDate), value)
}
如果我得到了这个的工作代码,这可能会有所帮助。
答案 0 :(得分:1)
这在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]
(*),除了一些与本次特定讨论无关的例外。