Golang开发JWT时提示GenerateAllTokens等函数未在models包中声明求助
问题原因及排查方案
你遇到的「函数未在包中声明」报错共有4种常见诱因,可按以下顺序排查:
核心排查方向
函数未做包导出
Golang 规定只有首字母大写的包成员才允许被外部包引用,检查你在models包中定义的GenerateAllTokens、UpdateAllTokens两个函数,首字母是否为大写,是否存在拼写大小写不匹配的问题。你提到models包下其他模型引用正常,说明User等结构体已经符合首字母大写规则,大概率是这两个函数忽略了导出规则。函数所属包声明错误
检查你写这两个函数的Go文件第一行的包声明是否为package models,如果误写成其他包名(比如package helper),即使文件放在models目录下,也不属于models包的导出成员。依赖缓存未更新
你代码中对models包同时声明了默认导入和别名导入helper "github.com/jwt/models",本身语法没有问题,但如果修改完models包代码后没有同步依赖,可能存在本地缓存调用旧版本代码的情况,执行以下命令清理缓存重新同步即可:
go clean -modcache go mod tidy
- 函数语法错误
检查两个函数的定义是否存在语法问题,比如漏写func关键字、函数体未闭合等,导致编译器没有将其识别为models包的有效成员。
验证方法
进入本地models包对应的目录,执行go doc .命令查看当前包的所有导出成员,如果输出列表中没有GenerateAllTokens、UpdateAllTokens,说明上述的导出规则、包声明问题一定存在,返回对应文件修正即可。
内容的提问来源于stack exchange,提问作者user16580170
相关产品推荐
相关产品推荐

