Golang回调函数问题:传递square函数时报错'function body missing'如何解决

Golang回调函数问题:传递square函数时报错’function body missing’如何解决

package main

import "fmt"

func main() {

	fmt.Println(squareMinusNum(square, 8))

}

func square (int num) int {

	return num*num

}

func squareMinusNum (f(int num) int, num int) int{

	x:= f(num)-num

	return x

}

// https://play.golang.org/p/WGu2tHIL3Uq


更多关于Golang回调函数问题:传递square函数时报错'function body missing'如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你好 Sajir!

你只需要进行几个简单的修正。在 Go 语言中,类型是放在变量名后面的,例如 func(num int) 而不是 func(int num),你之前写的是后者。

https://play.golang.org/p/XexKFyWeL6l

如果对此还有任何疑问,请随时告诉我。

更多关于Golang回调函数问题:传递square函数时报错'function body missing'如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,回调函数需要使用函数类型(function type)来声明参数。你的代码有两个主要问题:

  1. 函数参数声明语法错误
  2. 函数类型定义不正确

以下是修正后的代码:

package main

import "fmt"

// 定义函数类型
type squareFunc func(int) int

func main() {
    fmt.Println(squareMinusNum(square, 8))
}

func square(num int) int {
    return num * num
}

// 使用函数类型作为参数
func squareMinusNum(f squareFunc, num int) int {
    x := f(num) - num
    return x
}

或者,你也可以不使用类型别名,直接使用函数类型:

package main

import "fmt"

func main() {
    fmt.Println(squareMinusNum(square, 8))
}

func square(num int) int {
    return num * num
}

// 直接使用函数类型声明参数
func squareMinusNum(f func(int) int, num int) int {
    x := f(num) - num
    return x
}

关键点:

  • 函数类型应该写成 func(int) int 而不是 f(int num) int
  • 在参数列表中,函数类型的参数应该像其他参数一样声明,例如 f func(int) int
  • 你可以使用类型别名让代码更清晰,但这不是必需的

修正后的代码可以正确编译并输出结果:56(因为 8² - 8 = 64 - 8 = 56)。

回到顶部