2016-02-22 61 views
0

這是我的小問題。我有這樣的結構在我models/model.go從其他軟件包導入的結構體是未定義的

package models 

    import (
     "time" 
     "gopkg.in/mgo.v2/bson" 

    ) 

    type Horse struct { 
     Id bson.ObjectId `bson:"_id,omitempty"` 
     Title  string 
     Description string 
     CreatedOn time.Time 
     Creator  string 
     Visits int 
     Score  int 

    } 

在我controllers/crud.go我試圖使用Horse結構

package controllers 

import (
    "html/template" 
    "log" 
    "net/http" 
    "horseapp/models" 
) 
[...] 
var horseStore = make(map[string]Horse) //This raises undefined error 

,但我得到undefined: Horse當我go install horseapp

這裏有什麼問題,以及如何解決它?

+3

你的意思是'models.Horse'? – muru

回答

2

使用

var horseStore = make(map[string]models.Horse) 

當訪問從另一個包的標識符,你將永遠有包名和一個點前綴是:package.Identifier

+0

你說得對。謝謝你的提示。順便說一句,有沒有辦法在導入的文件中使用裸'Horse'以避免每次都附加'models.'? – Karlom

+0

僅限於它們在同一個包中。但我看到你正在按功能分組你的東西(即控制器進入包控制器,模型到包模型等)。爲什麼不按功能分組?所以'馬'和你的馬控制器都在'馬'包中? – Danilo

+2

@Karlom:您可以使用'.'導入名稱將所有標識符放入同一名稱空間,但不要這樣做 - 通常認爲這是不好的做法。 – JimB

相關問題