2016-04-28 77 views
1

因此,在此答案here中,声明不能将地图嵌入到go中的结构中。但是,我正在摆弄它,并提出了这个问题,它确实有效,而且非常简单。在go语言中将地图嵌入结构中

package main 

import (
    "fmt" 
    "runtime" 
) 

type record struct { 
    m map[string]int 
} 




func main() { 
    practice := record{m:make(map[string]int)} 
    practice.m["foo"] = 2 
    fmt.Println(practice.m) 
    runtime.GC() 
} 

此打印map[foo:2]

不过,我的问题是,是否有使用这个实现在结构图中的任何消极的一面,或者是有更有效的方式来做到这一点?

回答

3
  1. 你可以这样做,它绝对没问题。

  2. 这不是“嵌入”。嵌入意味着something specific - 在结构中包含一个名称类型的无名字段。您的地图没有嵌入,它是名为“m”的常规会员。

  3. 你链接的答案有点误导:那里的问题的答案(“我可以扁平这个JSON输出没有MarshalJSON方法”)确实没有,但它实际上并不是真的,嵌入一个结构的地图是禁止。如果你创建一个地图类型的命名类型,你可以将它嵌入到一个结构中。它只是以JSON的形式输出提问者喜欢的方式。
0

没有任何固有的缺陷。将结构图嵌入到结构中是一种常见的做法。实现中唯一的问题就是超出这个范围,比如当切片更好时使用地图来支持切片。但是,这在这里不重要。选择使用哪种集合类型(slice vs array vs map say)是一个不同的讨论,它更多地基于您的数据访问模式。一般来说,用Go的任何集合类型(map是其中之一)组成结构是很正常和习惯的。

编辑:从霍布斯注意到回答嵌入在问题和我的答案这个术语的滥用,正如他指出的那样,地图不是“嵌入式”,这是一种特定的语言功能,这实际上只是组合和我应该如上所述提及它。