我有以下文件夾結構:.├── Makefile├── README.md├── myproject│ ├── handlers│ │ └── authorize_handler.go│ ├── models│ │ ├── id_token.go│ ├── server.go從authorize_handler.go我嘗試IdToken.idType從id_token.go文件中引用該字段。authorize_handler.gopackage handlersimport ( "encoding/json" "log" "net/http" "myproject/models")func AuthorizeHandler(rw http.ResponseWriter, req *http.Request) { idToken := new(models.IdToken) decoder := json.NewDecoder(req.Body) err := decoder.Decode(&idToken) if err != nil { panic(err) } log.Println(idToken.idType)}id_token.gopackage modelstype IdToken struct { id string `json:"id" type:"string" required:"true" max_length:"50"` idType string `json:"idType" type:"idType" required:"false"`}當我開始server.go使用時go run server.go,出現以下錯誤:handlers/authorize_handler.go:29: idToken.idType undefined (cannot refer to unexported field or method idType)移動IdToken到authorize_handler.go確實可以解決問題。更改idType為IdType沒有。有什么想法或建議可以分享嗎?
1 回答

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
它在您當前導入時起作用的唯一方法是myproject/models包是否在您的$GOPATH/src目錄中,因為當您告訴它在沒有文件路徑的情況下導入時,它就是在那里尋找它。
或者,您可以使用相對路徑進行引用,例如../models但可能會變得混亂。此外,這種文件結構往往會導致循環依賴,所以如果你使用這種方法,請注意確保避免這種情況。
編輯:正如 captncraig 指出的那樣,編譯器似乎找到了包,所以這更有可能是結構中的字段沒有導出,因為它在定義中以小寫字符開頭。只需將其更改為大寫字母即可使其從包外部公開訪問。
type IdToken struct {
Id string `json:"id" type:"string" required:"true" max_length:"50"`
IdType string `json:"idType" type:"idType" required:"false"`
}
- 1 回答
- 0 關注
- 204 瀏覽
添加回答
舉報
0/150
提交
取消