为了账号安全,请及时绑定邮箱和手机立即绑定

从另一个包引用结构字段

从另一个包引用结构字段

Go
一只斗牛犬 2021-09-27 16:01:58
我有以下文件夹结构:.├── 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"`

}


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信