有两个数据结构( struct ),就像下面这样:
// 1
type Struct1 struct {
String string
}
type Structs1 []*Struct1 // Difference
type Test1Struct struct {
S Structs1
}
// 2
type Struct2 struct {
String string
}
type Structs2 []Struct2 // Difference
type Test2Struct struct {
S Structs2
}
他们的不同之处在于一个存的是struct
的Pointer
,另一个存的是struct
的Value
。
我做了一些测试,(似乎)表明使用Pointer
的时候要比使用Value
的时候更快:
[rain@localhost valuevspointor]$ go test -test.bench .
testing: warning: no tests to run
PASS
Benchmark1Pointer-2 5 229612872 ns/op
Benchmark2Value-2 1 1367639458 ns/op
Benchmark3HugeSetPointer-2 1 1100069534 ns/op
Benchmark4HugeSetValue-2 1 4037397573 ns/op
ok _/home/rain/Develpment/Meta/valuevspointor 10.775s
(当然这个测试说不定是有问题的,代码: https://gist.github.com/raincious/b70e17abfd08f4764683 )
按照上面的测试,想要建立一个新的 struct 应该优先使用&struct{}
而不是struct{}
,那么问题来了,如果是这样的话,struct{}
的意义何在?
或者应该问:如何决定应该使用&struct{}
还是struct{}
?
(比如在需要注意性能和 GC 的情况下)
感谢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.