Golang中关于包导入问题的讨论
Golang中关于包导入问题的讨论
我有一个位于 <base_dir>/pkg/logging.go 的源文件(包名为 logging),我想将一个 Logger 结构体导入到 <base_dir>/http/app_app.go 中(包名为 http)。
main.go
logger "github.com/tobigiwa/golang-security-backend/pkg/logging"
编译器仍然报错,提示导入失败,我哪里做错了?
2 回复
你好 @Oluwatobi_Giwa,
将 logging.go 移动到一个以包名命名的目录中,你的导入就应该可以正常工作了:
<base_dir>/pkg/logging/logging.go
或者将 pkg 目录重命名为 logging。一个 pkg 目录并非总是必需的。
更多关于Golang中关于包导入问题的讨论的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
问题在于你的导入路径和包结构不匹配。根据你的目录结构,正确的导入方式应该是相对路径或使用模块名。
首先,确保你在 <base_dir> 目录下有 go.mod 文件。如果使用 Go Modules,假设你的模块名是 github.com/tobigiwa/golang-security-backend,那么:
正确导入方式:
// 在 http/app_app.go 中
import (
"github.com/tobigiwa/golang-security-backend/pkg/logging"
)
// 使用示例
func someFunction() {
logger := logging.NewLogger() // 假设有 NewLogger 函数
logger.Info("test message")
}
如果是在同一个模块内,也可以使用相对路径:
// 在 http/app_app.go 中
import (
"../pkg/logging"
)
logging.go 示例:
// pkg/logging/logging.go
package logging
type Logger struct {
// 字段定义
}
func NewLogger() *Logger {
return &Logger{}
}
func (l *Logger) Info(msg string) {
// 实现日志记录
println("INFO:", msg)
}
检查要点:
- 确保
go.mod文件存在且模块名正确 - 确保 logging 包被正确导出(首字母大写的标识符)
- 如果使用相对路径导入,确保文件位置关系正确
错误示例(你当前的方式):
// 错误:使用了别名但路径不对
logger "github.com/tobigiwa/golang-security-backend/pkg/logging"
// 应该直接使用包名 logging,而不是别名 logger 作为包名
正确的导入应该使用包名 logging 而不是别名 logger 作为导入声明。

