Golang中同一包内如何在main函数调用其他函数

Golang中同一包内如何在main函数调用其他函数

我有一个名为 udamy 的包

在 udamy 包下,我有两个源文件

-------------main.go------------------

package main
import "fmt"
func main(){
fmt.println("main")
ss() // 调用 ss() 函数
}

---------hey.go--------------------------

package main
import "fmt"
func ss(){
fmt.println("ss")
ss() // 调用 ss() 函数
}

它们都在同一个包中,但当我尝试从 main 函数调用 ss 函数时,它显示未定义。


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

5 回复

----------------print.go------------------------

package main

import "fmt"

func ss(){
fmt.Println("heloo...")
}

仍然显示相同

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


好的,谢谢……go run . 对我有效。

你试图运行单个文件 main.go,但你拥有的是一个包。要运行包,请在包目录内执行:

$ go run .

有关详细信息,请参阅 go run 命令的文档。

注意:请不要发布代码或命令行输出的截图。也请在代码片段上使用编辑窗口顶部的 < /> 按钮。这将使你的代码以可读的方式呈现。

manoharnr:

ss()

你确定要在 ss() 函数内部调用 ss() 吗?这将导致无限递归。

移除递归后,你的代码运行正常。我已将两个文件放入名为 forum 的目录中。

// hey.go
package main

import "fmt"

func ss() {
    fmt.Println("ss")
}
// main.go
package main

import "fmt"

func main() {
    fmt.Println("main")
    ss() //calling ss() function
}
$ go build
$ ./forum
main
ss

在同一个包内调用函数不需要特殊处理。你的代码问题在于:

  1. 函数名大小写错误fmt.println 应该是 fmt.Println
  2. 递归调用缺少终止条件ss() 函数会无限递归调用自身

修正后的代码:

// main.go
package main

import "fmt"

func main() {
    fmt.Println("main")
    ss() // 正确调用 ss() 函数
}
// hey.go
package main

import "fmt"

func ss() {
    fmt.Println("ss")
    // 移除了递归调用,避免无限循环
}

或者如果你确实需要递归调用,需要添加终止条件:

// hey.go
package main

import "fmt"

func ss() {
    fmt.Println("ss")
    // 示例:添加计数器避免无限递归
    // 实际使用时需要根据业务逻辑设计终止条件
}

编译和运行:

go run main.go hey.go
# 或者
go run .

输出:

main
ss

关键点:

  • 同一包内的函数可以直接调用,无需导入
  • 函数名区分大小写,Go标准库函数使用首字母大写
  • 确保所有文件都在同一个包声明下(都是 package main
  • 递归函数必须有终止条件,否则会导致栈溢出
回到顶部