
1 neoblackcap 2018-02-19 23:47:31 +08:00 不是更省空间吗? |
2 50infivedays 2018-02-19 23:48:24 +08:00 遍历的时候 如果涉及数组元素的修改有差异 |
3 MeteorCat 2018-02-19 23:48:55 +08:00 via Android 按照 C/C++引用和实例区别,应该就是指针指向,Go 语言开发快捷,不过我还是推荐如果有时间把 C 接触下一下,有的问题可以在 C 上找到答案 |
4 choulinlin 2018-02-20 06:25:46 +08:00 via Android 指针数组 cpu 里计算 不是更加省时省空间? |
5 Mitt 2018-02-20 14:21:09 +08:00 via iPhone 一个是引用 一个是拷贝 |
6 deepzz 2018-02-20 18:20:42 +08:00 2l 不错,理解数据底层结构就知道用哪种了 |
7 wizardforcel 2018-02-20 21:19:24 +08:00 因为你只需要创建一个对象,而不是很多个对象 hhhhh |
8 chengluyu 2018-02-20 22:14:14 +08:00 via iPad 看你想怎么用了,如果你在某个函数体 /类中声明一个 struct[] 的话,这个数组中的结构体的生命周期等同于它的 enclosing scope,但是如果你想让这些东西在其 enclosing scope 生命周期结束后可用的话,就用一个 struct*[] 来保存这些结构体。 |
11 Equim 2018-02-21 16:11:36 +08:00 首先,[]*struct 还真不一定比 []struct 好 1. 你的 struct 体积本身就可能比它的指针还小 2. 用指针也略微加大了逃逸分析的难度 3. 如果需要频繁地对这整个 slice 进行写时复制的话,后者方便得多,还可以省个锁 好处一般就是省空间、mutation 能统一了,除了刚刚说的那种情况,看你实际需求。 |
12 admirez OP @chengluyu 我这样测试了下返回 []struct,是正常的 type sample struct {s string} func Foo() []sample { v := []sample{{"aa"},{"bb"}} return v } func main(){ h := Foo() h[1].s = "damn" fmt.Print(h) } |
14 picasso250 2018-02-22 15:28:11 +08:00 主要是为了一致性.如果全部都是 func (s *struct) xxx() {} 那么显然用[]*struct 更方便. |