【问题标题】:Receiver function not being found in a Go application [closed]在 Go 应用程序中找不到接收器功能 [关闭]
【发布时间】:2021-08-03 14:06:50
【问题描述】:

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

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

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

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

....

func main {
...
app := &application{
        cnf:    cfg,
        logger: logger,
    }
...

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

func (app *application) sendSlackMessage(msg string) error {}

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

err := app.sendSlackMessage(fmt.Sprintf("MESSAGE"))

我得到一个错误

app.sendSlackMessage undefined (type *application has no field or method SendSlackMessage)

我不确定问题是它在另一个文件中(尽管教程代码是这样做的)还是问题所在。

【问题讨论】:

  • 您是否有机会使用 go run main.go 执行代码?即编译和运行特定文件而不是整个包? go run docs
  • 使用go build并远离告诉您使用go run main.go的教程。

标签: function go


【解决方案1】:

运行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 源文件列表从一个目录, 但它也可能是导入路径,文件系统路径, 或者图案 匹配单个已知包,如“去跑”。或“去运行我的/ cmd”。

【讨论】:

  • go run . 几乎普遍优于 go run *.go,因为它会尊重构建标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多