6. 都能运行,编译器自动在调用时处理取值或取指针。编译器不希望你去处理这个问题,做区别是无意义的,应当在编写 A 的方法时确定应该传值还是传引用。当编译器无法取指针时,会报错,比如 aMap[key].Call(),因为无法对 aMap[key] 这个整体取址。
二
1. 关键字更新频繁:使用 sync.Map
几乎不更新:使用 atomic.Value 配合 map,参考
https://golang.org/pkg/sync/atomic/#Value 中的 Example (ReadMostly)
2. 两个数组分别排序,然后做一遍对比
for i, j := 0, 0; i < len(a) && j < len(b); {
if a[i] == b[i] {
fmt.Println(a[i])
i++
j++
} else if a[i] < j[i] {
i++
} else {
j++
}
}
或者使用短的数组做一个 map,然后遍历另一个数组(注意 map 初始大小足够,尽量避免扩容)
3. 9 个数字间有 8 个空位,每个空位有三种状态,共 3^8 种可能