Golang中如何调用其他包中的函数
Golang中如何调用其他包中的函数 你好,如何从另一个包中运行函数
我有两个文件
main.go
db.go
两个文件都属于main包
当我尝试在main.go中执行db.go中的函数时,出现错误 - 未定义:func…
9 回复
go run main.go other.go
等等,或者
go run *.go
感谢您的回答,我尝试了但失败了。

感谢各位朋友!现在可以正常工作了!

src/
| db/
| | db.go
| main.go
db/db.go
package db
func Fn() string {
return "Hello!"
}
main.go
package main
import (
"db"
"fmt"
)
func main() {
fmt.Println(db.Fn())
}
不,我的项目结构是这样的:
[文件夹] –main.go –db.go
如何在 main.go 中正确导入 db.go 文件?
我知道如果手动将 db.go 文件复制到 go path 目录中,这样是可行的…
但如果我只是想把项目拆分成小文件呢?如何正确访问同一目录下的文件?
以下是来自GoStart的关于将代码分离到不同包中的简要说明。GitHub - alco/gostart: Go新手上路指南
主包只允许定义一个
main函数,因此你需要从主包中选择一个单独的文件来放置它。
请参考解决方案,即创建一个 db 包并在该包中定义你的函数,然后将其导入到主包中。
在Go语言中,即使两个文件都属于同一个包(如main包),它们之间可以直接调用彼此的函数,无需导入。出现"未定义"错误通常是由于以下原因:
常见问题及解决方案:
1. 文件未正确编译
确保两个文件都参与编译:
# 正确方式
go run main.go db.go
# 或者编译整个包
go build
./your-program
2. 代码结构示例
db.go
package main
import "fmt"
// 函数名首字母必须大写才能被其他文件访问
func ConnectDB() {
fmt.Println("数据库连接成功")
}
func QueryData() string {
return "查询到的数据"
}
main.go
package main
import "fmt"
func main() {
// 直接调用db.go中的函数
ConnectDB()
result := QueryData()
fmt.Println("结果:", result)
}
3. 函数可见性规则
- 函数名首字母必须大写才能在包内跨文件访问
- 小写字母开头的函数只能在定义它的文件中使用
4. 如果使用模块
确保有正确的go.mod文件:
go mod init your-module-name
5. 完整工作示例
目录结构:
project/
├── main.go
├── db.go
└── go.mod
go.mod
module example.com/project
go 1.21
按照上述结构组织代码,确保使用正确的编译命令,即可解决函数未定义的问题。


