我有以下文件夹结构:.├── 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 关注
- 173 浏览
添加回答
举报
0/150
提交
取消