初始化空切片的正确方法

要声明一个具有非固定大小的空切片,最好这样做:

mySlice1 := make([]int, 0)

或者:

mySlice2 := []int{}

只是想知道哪个是正确的方法。


慕妹3242003
浏览 235回答 3
3回答

喵喔喔

它们是等价的。看到这个代码:mySlice1 := make([]int, 0)mySlice2 := []int{}fmt.Println("mySlice1", cap(mySlice1))fmt.Println("mySlice2", cap(mySlice2))输出:mySlice1 0mySlice2 0两个切片都有0容量,这意味着两个切片都有0长度(不能大于容量),这意味着两个切片都没有元素。这意味着 2 个切片在各个方面都是相同的。

绝地无双

作为@ANisus回答的补充...以下是“Go in action”一书中的一些信息,我认为值得一提:nil&empty切片的区别如果我们考虑这样的切片:[pointer] [length] [capacity]然后:nil slice:   [nil][0][0]empty slice: [addr][0][0] // points to an address零切片当您想要表示一个不存在的切片时,它们很有用,例如在返回切片的函数中发生异常时。// Create a nil slice of integers.var slice []int空切片当您想要表示一个空集合时,例如当数据库查询返回零结果时,空切片很有用。// Use make to create an empty slice of integers.slice := make([]int, 0)// Use a slice literal to create an empty slice of integers.slice := []int{}不管您使用的是零片或空片,内置的功能append,len和cap工作一样。去游乐场示例:package mainimport (    "fmt")func main() {    var nil_slice []int    var empty_slice = []int{}    fmt.Println(nil_slice == nil, len(nil_slice), cap(nil_slice))    fmt.Println(empty_slice == nil, len(empty_slice), cap(empty_slice))}印刷:true 0 0false 0 0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go