我想找到更快的:结构与数组。因此,我编写了一个GO代码,在其中我将4个int值(1、2、3和4)写入一个结构的成员,然后写入一个长度为4的数组。我试图找出写入所需的时间。
案例1:首先,我将值写入结构,然后写入数组。在这里,我发现数组比结构要快。
package main import ( "fmt" "time" ) type abc struct { a, b, c, d int } func main() { var obj abc t1 := time.Now() obj.a = 1 obj.b = 2 obj.c = 3 obj.d = 4 t2 := time.Since(t1) fmt.Println("Struct access time: : ", t2) a := make([]int, 4) t3 := time.Now() a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 t4 := time.Since(t3) fmt.Println("Array access time: : ", t4) }
情况2:其次,我将值写入数组,然后写入结构。在这里,我发现结构比数组要快。
package main import ( "fmt" "time" ) type abc struct { a, b, c, d int } func main() { var obj abc a := make([]int, 4) t3 := time.Now() a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 t4 := time.Since(t3) fmt.Println("Array access time: : ", t4) t1 := time.Now() obj.a = 1 obj.b = 2 obj.c = 3 obj.d = 4 t2 := time.Since(t1) fmt.Println("Struct access time: : ", t2) }
为什么性能取决于我首先写的内容?我首先写的那个似乎慢一些。为什么会这样呢?
另一个答案解释了时序差异,让我们进入结构与切片。
如果编译器可以在编译时确定切片足够大,则访问切片的元素和结构将生成相同的代码。当然,实际上,实际上,编译器通常不会知道切片的大小,并且将根据您使用的是结构还是切片来应用完全不同的优化,因此,要衡量性能,您必须查看整体程序及其行为,而不仅仅是一项特定的操作。