上QQ阅读APP看书,第一时间看更新
12.2 数组/切片复合字面值
与结构体类型不同,数组/切片使用下标(index)作为field:value形式中的field,从而实现数组/切片初始元素值的高级构造形式:
numbers := [256]int{'a': 8, 'b': 7, 'c': 4, 'd': 3, 'e': 2, 'y': 1, 'x': 5} // [10]float{-1, 0, 0, 0, -0.1, -0.1, 0, 0.1, 0, -1} fnumbers := [...]float{-1, 4: -0.1, -0.1, 7:0.1, 9: -1} // $GOROOT/src/sort/search_test.go var data = []int{0: -10, 1: -5, 2: 0, 3: 1, 4: 2, 5: 3, 6: 5, 7: 7, 8: 11, 9: 100, 10: 100, 11: 100, 12: 1000, 13: 10000} var sdata = []string{0: "f", 1: "foo", 2: "foobar", 3: "x"}
不同于结构体复合字面值较多采用field:value形式作为值构造器,数组/切片由于其固有的特性,采用index:value为其构造初值,主要应用在少数场合,比如为非连续(稀疏)元素构造初值(如上面示例中的numbers、fnumbers)、让编译器根据最大元素下标值推导数组的大小(如上面示例中的fnumbers)等。
另外在编写单元测试时,为了更显著地体现元素对应的下标值,可能会使用index:value形式来为数组/切片进行值构造,如上面标准库单元测试源码中的data和sdata。