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切片的區(qū)別
如果我們考慮這樣的切片:
[pointer] [length] [capacity]
然后:
nil slice: [nil][0][0]
empty slice: [addr][0][0] // points to an address
零切片
當您想要表示一個不存在的切片時,它們很有用,例如在返回切片的函數(shù)中發(fā)生異常時。
// Create a nil slice of integers.
var slice []int
空切片
當您想要表示一個空集合時,例如當數(shù)據(jù)庫查詢返回零結果時,空切片很有用。
// 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 關注
- 261 瀏覽
添加回答
舉報