我有以下文件夹结构:
.
├── Makefile
├── README.md
├── myproject
│ ├── handlers
│ │ └── authorize_handler.go
│ ├── models
│ │ ├── id_token.go
│ ├── server.go
从authorize_handler.go
我尝试引用IdToken.idType
文件中的id_token.go
字段。
authorize_handler.go
package handlers
import (
"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.go
package models
type 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
则不会。
分享的想法或指示?
答案 0 :(得分:-1)
当前导入它的唯一方法就是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"`
}