它比较了切片声明与制作切片,而我的问题比较了切片文字与制作切片。这个问题有一个简单的答案,因为一个裸切片声明会创建一个 nil 切片,但是,如果您仔细阅读下面的问题,我根本不会创建一个 nil 切片。
有两种方法可以创建切片并附加到切片。我下面的代码显示了Example 1和两种方式Example 2。
package main
import (
"fmt"
)
func main() {
// Example 1
a := []int{}
fmt.Printf("len(a): %d; cap(a): %d; a: %v\n", len(a), cap(a), a)
a = append(a, 10, 20, 30, 40, 50)
fmt.Printf("len(a): %d; cap(a): %d; a: %v\n", len(a), cap(a), a)
// Example 2
b := make([]int, 0)
fmt.Printf("len(b): %d; cap(b): %d; b: %v\n", len(b), cap(b), b)
b = append(b, 10, 20, 30, 40, 50)
fmt.Printf("len(b): %d; cap(b): %d; b: %v\n", len(b), cap(b), b)
}
输出:
len(a): 0; cap(a): 0; a: []
len(a): 5; cap(a): 6; a: [10 20 30 40 50]
len(b): 0; cap(b): 0; b: []
len(b): 5; cap(b): 6; b: [10 20 30 40 50]
两种创建空切片的方法都是[]int{}等效make([]int, 0)的吗?在任何情况下,他们的行为会有所不同吗?
泛舟湖上清波郎朗
相关分类