3 回答
TA贡献1735条经验 获得超5个赞
它们是等价的。看到这个代码:
mySlice1 := make([]int, 0)
mySlice2 := []int{}
fmt.Println("mySlice1", cap(mySlice1))
fmt.Println("mySlice2", cap(mySlice2))
输出:
mySlice1 0
mySlice2 0
两个切片都有0容量,这意味着两个切片都有0长度(不能大于容量),这意味着两个切片都没有元素。这意味着 2 个切片在各个方面都是相同的。
TA贡献1946条经验 获得超4个赞
作为@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 main
import (
"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 0
false 0 0
- 3 回答
- 0 关注
- 234 浏览
添加回答
举报