我正在努力弄清楚为什么在 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)
我不确定问题是否出在另一个文件中(尽管教程代码是这样做的)或者问题是什么。
运行将仅go run main.go编译并执行该文件。该包中的任何其他文件都将被忽略。main.go.go
相反,尝试运行以下之一:
go run .go run *.gogo run my/cmdgo build -o ./main && ./mainhttps://pkg.go.dev/cmd/go#hdr-Compile_and_run_Go_program
Run 编译并运行指定的主 Go 包。通常,包被指定为来自单个目录的 .go 源文件列表,但它也可能是导入路径、文件系统路径或与单个已知包匹配的模式,如“go run”。或“运行我的/cmd”。