package test
import (
"fmt"
"reflect"
"testing"
)
func fun(val ...int) {
fmt.Println(reflect.TypeOf(val))
}
func TestTime(t *testing.T) {
for i := 0; i < 100000; i++ {
//fun(1, 2, 3) //(1)
//fun([]int{1, 2, 3}...) //(2)
}
}
(1)耗时:
(2)耗时:
可变参数,都是以切片复制的形式来传递的, 因为切换的数据结构(指针, 长度, 容量). 一开始, 我以为是(1)更耗时的, 因为要把单一类型一个个组装成切片, (2)就是切片, 不用组装. 但是结果表明是(2)更耗时....
其中肯定发生了什么转换, 那请问大神究竟是发生了什么呢?
有疑问加站长微信联系(非本文作者)

@polaris
我猜二的关键在于
...
,做了一些事情吧,具体没了解这块的实现。看书提到, 切片会打散再逐个放进去做参数, 多了打散操作?