2014-01-18 80 views
12

我試圖學習Go,但我經常感到沮喪,因爲其他語言的某些基本功能似乎在Go中不起作用。所以基本上,我想使用在其他文件中定義的結構類型 。我能夠使用除了結構類型的函數。在main.go中,Go - 如何導入其他包內部的結構?

package main 

    import (
     "list" 
) 

    func main() { 
     lst := list.NewList(false)   
     lst.Insert(5) 
     lst.Insert(7) 
     lst.InsertAt(2, 1) 
     lst.PrintList() 
    } 

這可以完美地(和所有其他函數)按我期望的那樣工作(列表在$ GOPATH中)。在包列表中,我定義的結構如下:

type LinkedList struct { 
    head *node 
    size int 
    isFixed bool 
} 

我想利用這個結構中其他結構,所以我試圖做這樣的事情,

type SomeType struct { 
    lst *LinkedList 
} 

但不幸的是,我得到了錯誤類型LinkedList沒有被定義。我如何使用其他包中定義的結構?

+1

確實[此帖](http://stackoverflow.com/a/15051192/2908724)回答您的題? – bishop

+0

不是。正如我所說,除了直接使用結構類型外,其他所有函數都可以工那篇文章是關於導入其他文件的,我沒有得到任何關於查找包的錯誤。 – REALFREE

+0

只要結構的名稱具有大寫的第一個字母,就應該使用名稱空間名稱(如@tobi所示)來訪問它。 –

回答

22

LinkedList類型在list命名空間,因此改變你的類型的用法:

type SomeType struct { 
    lst *list.LinkedList 
} 
+0

OMG ..謝謝 - 那簡單的... – REALFREE

+1

@REALFREE,「Effective Go」[提供答案](http://golang.org/doc/effective_go.html#包名稱)。請認真閱讀本文檔,然後再認真討論Go。 – kostix

+0

@kostix well thx我通過它掠過,但也許我錯過了那部分 – REALFREE