You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go如何导入其他包的结构体及字段?跨包调用方法后字段取值为空怎么解决

问题原因
  • 导入路径不匹配:你当前使用的导入路径main/other和项目go.mod声明的模块名不一致,导致Go没有导入你本地编写的other包,而是拉取了缓存中无实际实现的空包,调用SetDay自然不会修改Day字段。这也是同包运行正常、跨包运行异常的核心原因:同包运行不需要走导入逻辑,直接使用当前文件的代码实现。
  • 旧包缓存未清理:如果你之前修改过other包的SetDay实现(比如早期写为值接收者),修改后没有清理模块缓存,Go运行时会直接调用旧版本的方法,值接收者只会修改结构体副本,不会生效到原变量上。
解决方案
  1. 修正模块导入配置
    • 在项目根目录执行初始化命令:go mod init demo(demo可替换为任意你想用的模块名)
    • 确认项目结构如下:
      项目根目录
      ├── go.mod
      ├── other
      │   └── other.go // 存放Birthday相关代码
      └── main.go
      
    • 将main.go中的导入语句修改为import "demo/other",和模块名保持一致。
  2. 清理缓存重新运行
    执行命令清理旧缓存:go clean -modcache,再执行go run main.go即可得到预期输出10。

内容的提问来源于stack exchange,提问作者Ignacio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:39:03