从另一个包引用结构字段

我有以下文件夹结构:


.

├── 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没有。


有什么想法或建议可以分享吗?


一只斗牛犬
浏览 178回答 1
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"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go