将字符串转换为字段名称

时间:2015-11-05 16:30:15

标签: struct go maps

我有一个结构,我将所有小时和分钟存储到mongodb中。在这种情况下,当我收到修改值的请求时,我将小时和分钟作为字符串。有没有办法从输入的字符串中找到字段名称

你可以看到它here

package main

import "fmt"

type Min struct {
    v01 int `bson:"01",json:"01"`
    v02 int `bson:"02",json:"02"`
}

type Hour struct {
    v01 Min `bson:"01",json:"01"`
    v02 Min `bson:"02",json:"02"`
}

func main() {
    fmt.Println("Hello, playground")
    var h Hour
    h.v01.v01 = 1
    h.v02.v01 = 2
    fmt.Println(h)
    h.Set("01", "01", 10)
    fmt.Println(h)
}

func (h *Hour) Set(hour string, min string, value int) {
    h.v01.v01 = 10 //Here I have hardcoded it
    // Is there a way to do this from the given input
    // e.g. h.Set("01","01",100)
}

如果您注意到,输入为"01","01"。我想将此输入更改为h.v01.v01。 Go中有可能吗?

注意:在这种情况下,我目前正在使用maps。如果可能的话,我想将其更改为结构访问权限,以便我可以使用goroutine来加速我的程序。目前,goroutine对于写入地图并不安全。

1 个答案:

答案 0 :(得分:0)

  

目前goroutine不适合写入地图。

可能需要重新审视Go 1.9(2017年8月)和concurrent map

中的sync package
  

Map包中的新sync类型是一个并发地图,其中包含摊销常数时间加载,存储和删除。
  多个goroutine可以安全地同时调用Map方法。

将我提到的oleiade/reflections与评论时的GoLang: Access struct property by name结合起来,在" {{3}}"中,您应该能够同时执行这两项操作(访问属性名称,并使用地图)