首页 > 解决方案 > 方法在运行时不可见

问题描述

我有以下代码结构

❯ tree -L 2                    
.
├── Dockerfile
├── Makefile
├── README.md
├── cmd
│   ├── app
├── coverage.out
├── go.mod
├── go.sum
├── internal
│   ├── context
│   ├── pubsub
│   └── test_helpers
├── pkg
│   ├── <service_name>
└── tools
    ├── random.go
    └── mymethod.go

这是random.go文件的代码


package main

func main() {
    SayHi()
}

该方法SayHimymethod.go这样定义的

package main

import "fmt"

// SayHi comment
func SayHi() {
    fmt.Printf("saying hi ...")
}

当我运行 myrandom.go时,我得到一个SayHi未定义的错误。这两个文件都在同一个包下,tools所以我不确定我做错了什么。我必须以不同的方式导入它吗?

标签: go

解决方案


go run命令运行整个包或单个文件。如果您只指定一个文件,它不会加载整个文件夹。这就是为什么如果你运行go run random.go,它不会加载mymethod.go文件。

如果您在“工具”文件夹中只有一个main()功能(假设是 a package main),您可以简单地在该文件夹中执行此操作:

go run .

如果您只需要 2 个文件而不需要其他文件:

go run random.go mymethod.go

推荐阅读