Golang导入包时遇到错误怎么办

Golang导入包时遇到错误怎么办 我有一个Go应用程序,其结构如下:

rschluet-general-ledger (项目目录)
     -administration
            -administration.go
    -archithreadsdb
            -archithreadsdb.go
    -main.go

我在许多其他包中也使用了相同的设置,它们都能正常工作。

main.go 中包含:

import (
	"rschluet-general-ledger/archithreadsdb"
)
main()
	uniqueIdentifier := archithreadsdb.NewUniqueIdentifier()
	fmt.Println(uniqueIdentifier)
...

我使用相同结构和导入方式设置的其他包都能正常工作。但在这个特定情况下,我遇到了以下错误:

./main.go:4:2: imported and not used: "rschluet-general-ledger/archithreadsdb" as archithreadsDB
./main.go:105:22: undefined: archithreadsdb

显然,archithreadsdb 确实被使用了。如果我在 archithreadsdb 中故意创建一个错误,该错误会被报告:

archithreadsdb/archithreadsdb.go:17:2: undefined: cxcxcvx

所以我知道编译器首先处理 archithreadsdb 时没有错误(在移除故意制造的错之后)。

我尝试从 administration 包中调用 archithreadsdb,得到了相同的错误。


更多关于Golang导入包时遇到错误怎么办的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

看起来 rschluet-general-ledger/archithreadsdb 将其自身的 package 名称定义为 archithreadsDB(“DB”为大写),而你在代码中使用了 archithreadsdb(“db”为小写)。

更多关于Golang导入包时遇到错误怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


感谢,Norbert,有时候你确实需要另一双眼睛来看待一个问题。我想我的眼睛对大小写不敏感。我把所有的 archithreadsdb 都改成了 arDB,现在可以正常工作了,而且使用起来也更方便。

从错误信息来看,Go编译器将导入的包识别为archithreadsDB(大写DB),但代码中使用的是archithreadsdb(小写db)。这通常是由于包声明与导入路径不匹配导致的。

检查archithreadsdb/archithreadsdb.go文件中的包声明:

// 错误示例:包名与导入路径大小写不一致
package archithreadsDB  // 大写DB

// 正确应该为:
package archithreadsdb  // 小写db

同时确认你的目录结构确实是archithreadsdb(全小写)。如果目录名是archithreadsDB,需要修改导入语句:

// 如果目录名是archithreadsDB
import (
    "rschluet-general-ledger/archithreadsDB"
)

func main() {
    uniqueIdentifier := archithreadsDB.NewUniqueIdentifier()  // 注意大写DB
    fmt.Println(uniqueIdentifier)
}

另外,确保你的go.mod文件正确配置:

module rschluet-general-ledger

go 1.21

如果问题仍然存在,可以尝试清理并重新构建:

go clean -cache
go mod tidy
go build

检查archithreadsdb包中是否正确定义了NewUniqueIdentifier函数:

// archithreadsdb/archithreadsdb.go
package archithreadsdb

func NewUniqueIdentifier() string {
    return "unique-id"
}
回到顶部