2011-10-12 49 views
3

我正在嘗試一點go programming language在編程語言中使用任何類型和實現泛型列表

我對Go的簡單感到興奮,但在玩之後我遇到了一些麻煩。

1。我知道不支持泛型和繼承。 有什麼辦法可以實現泛型列表?

我想使用:

type Any interface { } 

,但我怎麼能檢查,如果該值爲NULL。
我正在尋找一些相當於實施到C

struct List { 
    List* tail; 
    void* head; 
} 

或者用代數數據類型:

data List a = Nil | Cons a (List a) 


2。更高級的要求是爲具有特定類型字段的對象創建一些容器?
例如在Scala編程語言我可以輸入:

val List[Animal { type SuitableFood = Grass} ] 

得到的Animals一個List,其中有一個成員類型SuitableFood這是Grass

+0

可能的重複[爲什麼沒有泛型在去](http://stackoverflow.com/questions/3912089/why-no-generics-in-go) – tylerl

+0

不完全 - 我不問*爲什麼沒有泛型在去*但*如何模仿他們* –

+0

我不知道人們認真對待,儘管它沒有泛型和繼承。 –

回答

3

你可以有interface{}類型的元素列表。你可以放入任何元素,當你拿出它時,你必須回到你想要的類型。這就像你在C示例中做的void *;並且還像泛型之前的Java中的列表以及沒有泛型的Objective-C中的列表。 Go庫中的所有容器都這樣做。

沒有泛型,沒有編譯時檢查元素類型。

如果您真的想要,可以通過使用反射來獲取元素類型並根據預期類型檢查元素類型來實現對元素類型的運行時檢查。但是,這可能是矯枉過正。