Go自定义包不在标准库报错求助:package lesson/students is not in std
解决Go包导入错误:package lesson/students is not in std
你遇到的错误是因为模块初始化路径和项目目录结构不匹配,导致Go无法正确识别本地自定义包。
问题根源
你在project目录下执行go mod init lesson将模块名设为lesson,但students包实际位于project/lesson子目录中。Go会基于模块名匹配包的导入路径,此时你写的"lesson/students"会让Go在模块根目录(project)下寻找students目录,而非lesson子目录下的students包,因此找不到包并误以为它是标准库包。
修复方案(推荐第一种)
方案1:调整目录结构,遵循包目录与包名一致的规范
- 将
project/lesson目录重命名为project/students,项目结构变为:
project/ students/ students.go main.go go.mod
- 保持
main.go的导入语句不变:
import ( "fmt" "lesson/students" )
- 在
project目录下执行go run main.go即可正常运行。
方案2:不修改目录,修正导入路径
如果不想改动目录结构,需要将main.go的导入路径改为模块名+子目录名(因为students包在lesson子目录下):
import ( "fmt" "lesson/lesson" )
代码中仍使用students.Student创建实例(因为students.go的包名是students)。不过这种目录名与包名不一致的写法不推荐,容易造成混淆。
方案3:重新初始化模块
若想保留原有目录结构,可重新初始化模块,在project目录下执行:
go mod init myproject
然后将main.go的导入语句改为:
import ( "fmt" "myproject/lesson/students" )
再执行go run main.go即可。
内容的提问来源于stack exchange,提问作者DJsega1
相关产品推荐
相关产品推荐

