2014-03-31 17 views
-3

Reading關於Golang中的數組和切片的切片中的長度和容量方法

爲什麼使用像lencap這樣的內置函數而不是切片對象上的類似方法?

if cap(slice) == len(slice) { 
    fmt.Println("slice is full!") 
} 

VS

if slice.cap() == slice.len() { 
    fmt.Println("slice is full!") 
} 

爲什麼污染全局命名空間?爲什麼不使用面向對象的風格?

此外,是否存在這樣的方法,可以使用它們而不是內置函數?

+5

http://golang.org/doc/faq#methods_on_basics – Evan

回答

2

有一個FAQ entry on this,但這裏是我的看法:

len()cap()是建立在功能,因爲它們是由編譯器的理解。你不能做出自己的替代品 - 它們是非核心語言的一部分,但方法不是,你不應該將它們與方法混淆。

在去一片是由三件事情,一length, a capacity and a pointer to the underlying memory。例如,從reflect

type SliceHeader struct { 
     Data uintptr 
     Len int 
     Cap int 
} 

所有len(x)定義並讀取從片結構的長度,所以簡寫爲像x.Len和編譯器理解和相應地優化它。