GolangCodingTime icon indicating copy to clipboard operation
GolangCodingTime copied to clipboard

c04/c04_02

Open utterances-bot opened this issue 3 years ago • 6 comments

4.2 学习 Go 函数:函数类型是什么? — Go编程时光 1.0.0 documentation

https://golang.iswbm.com/c04/c04_02.html

utterances-bot avatar May 26 '22 01:05 utterances-bot

能否讲一下这个函数类型的意义,不然为什么不直接调用想调用的函数,而要用函数类型去调用呢?这个在python和C++中都没有这种用法,为什么go要有这种用法呢?

huzunhao avatar May 26 '22 01:05 huzunhao

能否讲一下这个函数类型的意义,不然为什么不直接调用想调用的函数,而要用函数类型去调用呢?这个在python和C++中都没有这种用法,为什么go要有这种用法呢?

函数在定义时,入参和返回,都要定好其类型。

常见的入参和返回,是对象。

但也有一些入参和返回,是函数,比如回调函数。

用这个来解释,不知道你好理解不?

iswbm avatar Jun 11 '22 06:06 iswbm

能否讲一下这个函数类型的意义,不然为什么不直接调用想调用的函数,而要用函数类型去调用呢?这个在python和C++中都没有这种用法,为什么go要有这种用法呢?

问题是:函数本身可不可以被看成对象。 看起来是可以的,函数本身就是对象,通过函数与对象绑定形成方法,这样可以实现函数类型调用某个方法。

baibinghere avatar Nov 14 '22 05:11 baibinghere

能否讲一下这个函数类型的意义,不然为什么不直接调用想调用的函数,而要用函数类型去调用呢?这个在python和C++中都没有这种用法,为什么go要有这种用法呢?

设计思维:函数可以调用函数,那么在java中都是直接this.anotherMethod(int someParams); 但是到了go里面,由于设计语言的 人员不一样,这些人似乎吸收了前端语言和其他语言的优势,然后可以设置函数做为参数传入,作为返回值返回函数,这本身想就是可以的。只是之前没有这样设计而已,函数作为参数传入,就可以在某些条件下去回调这个函数,比如说:

var(
   status = 0; //0 代表饿;1代表吃饱
)

type check func(n int)

func (c check) eatMeal(food string) {
   if(status ==1) {
    fmt.Println(c(food))
   }
   fmt.Println("我正在吃:", food)
   
}

func sayNo(){
  fmt.Println("我吃饱了")
}

func main() {
   m := check(sayNo)
   status = 1
   m.eatMeal("苗条")
}

lekuyuan avatar Jul 05 '23 11:07 lekuyuan

参考java中 lambda表达式思想

weibin2537 avatar Sep 18 '23 06:09 weibin2537

好处是可以对一个方法进行装饰。这里定义一个函数对象可以将符合该模式的函数重新包装,起到 aop 的作用

guguoyi avatar Apr 09 '24 23:04 guguoyi