Golang中如何调用其他包中的函数

Golang中如何调用其他包中的函数 你好,如何从另一个包中运行函数

我有两个文件

main.go
db.go

两个文件都属于main包

当我尝试在main.go中执行db.go中的函数时,出现错误 - 未定义:func…

9 回复

你能粘贴一下你的代码吗?

更多关于Golang中如何调用其他包中的函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go run main.go other.go

等等,或者

go run *.go

main 包有些特殊,它不应该被拆分到多个文件中。

你需要在编译时指定每个文件,或者将其拆分到不同的包中。

感谢您的回答,我尝试了但失败了。

Screenshot

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

Screenshot

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

按照上述结构组织代码,确保使用正确的编译命令,即可解决函数未定义的问题。

回到顶部