在 Go 应用程序中找不到接收器函数

Pet*_*Unn -1 function go

我正在努力弄清楚为什么在 go 应用程序中找不到接收器功能。

我正在将我的代码与其他教程代码进行比较,因为我一生都看不到问题。

我在 main.go 中有一个名为 application 的结构,并在 main 函数中创建它的实例。

type application struct {
    cnf    cnf
    logger *log.Logger
}

....

func main {
...
app := &application{
        cnf:    cfg,
        logger: logger,
    }
...
Run Code Online (Sandbox Code Playgroud)

在同一个 main.go 文件中,我还有其他函数,这些函数是似乎工作正常的函数接收器,但我在一个单独的文件中有一个函数,位于带有签名的包 main 中

func (app *application) sendSlackMessage(msg string) error {}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试从 main 中的另一个函数调用它时,就像这样

err := app.sendSlackMessage(fmt.Sprintf("MESSAGE"))
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

app.sendSlackMessage undefined (type *application has no field or method SendSlackMessage)
Run Code Online (Sandbox Code Playgroud)

我不确定问题是否出在另一个文件中(尽管教程代码是这样做的)或者问题是什么。

mko*_*iva 5

运行将go run main.go编译并执行该文件。该包中的任何其他文件都将被忽略。main.go.go

相反,尝试运行以下之一:

  • go run .
  • go run *.go
  • go run my/cmd
  • go build -o ./main && ./main

https://pkg.go.dev/cmd/go#hdr-Compile_and_run_Go_program

Run 编译并运行指定的主 Go 包。通常,包被指定为来自单个目录的 .go 源文件列表,但它也可能是导入路径文件系统路径或与单个已知包匹配的模式,如“go run”。或“运行我的/cmd”。