Go中的未定义函数错误:如何从主文件访问函数?

z0qdvdin  于 2023-11-14  发布在  Go
关注(0)|答案(2)|浏览(125)

此问题在此处已有答案

"undefined" function declared in another file?(14个回答)
7天前关闭
我目前正在学习GoLang,为了更好地组织代码,我将代码分成多个文件。我的项目结构如下:

  1. myproject/
  2. main.go
  3. hello-world.go
  4. variable.go

字符集

main.go

  1. package main
  2. func main() {
  3. printHelloWorld()
  4. showVariable()
  5. }

你好世界.去

  1. package main
  2. import "fmt"
  3. func printHelloWorld() {
  4. fmt.Println("Hello world")
  5. }

变量。去

  1. package main
  2. import "fmt"
  3. func showVariable() {
  4. var a int = 5
  5. fmt.Println(a)
  6. }


当我运行go run main.go时,我得到以下错误消息:

  1. ABIR Go Project %go run main.go
  2. # command-line-arguments
  3. ./main.go:4:2: undefined: printHelloWorld
  4. ./main.go:5:2: undefined: showVariable


我相信这个问题与不同文件和包之间函数的可见性有关。我如何才能正确地访问Go项目中不同文件中的函数?我做错了什么?
我很感激你能提供的任何帮助或指导。谢谢!

jtw3ybtb

jtw3ybtb1#

正如其他人所说,你需要运行go run .。然而,我假设你还没有运行go mod init <module_name>命令,因为我在你显示的文件夹结构中没有看到go.mod文件。因此,你应该做的是:
1.运行go mod init <module name of your choice>
举例来说:go mod init my_awesome_project。请注意,命名模块的惯例是将URI指定给您计划托管此模块的位置。但是,您仍然可以随意命名它。运行此命令意味着您将把文件夹转换为Go模块,因此允许Go访问其他文件。
1.然后运行go run .

apeeds0o

apeeds0o2#

使用go run .命令编译和执行文件夹中的所有文件。但是,为了更好地查看和理解,您必须使用不同的文件夹结构。

  1. cmd/
  2. main.go
  3. internal/
  4. handler/
  5. hello-world.go
  6. utils/
  7. variable.go
  8. etc/

字符集
然后使用命令

  1. go mod init
  2. go mod tidy
  3. // may be build and run here?
  4. go run cmd/main.go

展开查看全部

相关问题