如何通过串联两个字符串来创建动态变量名称

时间:2019-01-20 10:02:46

标签: variables go

我想通过与当前日期连接来创建变量名,并为创建的变量名提供一个值。我的变量名应类似于“ 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)
    }      

如果我得到了这个的工作代码,这可能会有所帮助。

1 个答案:

答案 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]

(*),除了一些与本次特定讨论无关的例外。