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)
}

检查要点:

  1. 确保 go.mod 文件存在且模块名正确
  2. 确保 logging 包被正确导出(首字母大写的标识符)
  3. 如果使用相对路径导入,确保文件位置关系正确

错误示例(你当前的方式):

// 错误:使用了别名但路径不对
logger "github.com/tobigiwa/golang-security-backend/pkg/logging"
// 应该直接使用包名 logging,而不是别名 logger 作为包名

正确的导入应该使用包名 logging 而不是别名 logger 作为导入声明。

回到顶部