我正在使用go 1.3。
如何访问地图的匿名结构ValueType的字段?
package main
import "fmt"
type Words map[string]struct{
pos int
n int
}
func main() {
w := make(Words)
w["abc"].pos = 5 // cannot assign
fmt.Println(w)
}
答案 0 :(得分:5)
例如,
package main
import "fmt"
type Words map[string]struct {
pos int
n int
}
func main() {
w := make(Words)
v := w["abc"]
v.pos = 5
v.n = 42
w["abc"] = v
fmt.Println(w)
}
输出:
map[abc:{5 42}]
答案 1 :(得分:1)
您需要为密钥指定一个值(您的结构):
type S struct {
pos int
n int
}
type Words map[string]S
func main() {
w := make(Words)
s := S{pos: 1, n: 2}
w["abc"] = s
fmt.Println(w)
}
请参阅此 play.golang.org 示例。
输出:
map[abc:{1 2}]
点击“Go maps in action”了解更多信息。
然后您可以检索您的值并指定:
sbis := w["abc"]
sbis.pos = 11
fmt.Println(sbis)
输出:
{11 2}
In his example,OneOfOne提出了一个getter,以便更快地分配pos,但是如果需要则创建正确的值(即结构的一个实例):
func (w Words) get(s string) (p *ps) {
if p = w[s]; p == nil {
p = &ps{}
w[s] = p
}
return
}
允许:
w := Words{}
w.get("abc").pos = 10
答案 2 :(得分:0)
您可以通过这种方式设置键的值。
package main
import "fmt"
func main() {
w := make(map[string]struct {
pos int
n int
})
w["abc"] = struct {
pos int
n int
}{
pos: 5,
}
fmt.Println(w)
}
读取键的值更容易。
fmt.Println(w["abc"].pos)