Golang 基础值速学之十九(函数作为值与类型)

在go语言当中,我们可以把函数作为一种变量,用type去定义它,那么这个函数类型就可以作为值传递,甚至可以实现方法,这一特性实在太灵活了,有时候我们甚至可以利用这一特性进行类型转换,作为值传递的条件是类型具有相同的参数以及相同的返回值
函数类型转换
Go语言的类型转换的基本格式如下:
type_name(expression)
上代码:

package main

import (
    "fmt"
     "sync"
 )

func main() {
 //函数的类型转换
  //将add()函数强制转换为我们自定义的CalculateType()类型
  zhAdd := CalculateType(add)
   //那么zhAdd就可以调用CalculateType()函数类型实现的方法Serve()
  zhAdd.Serve()
   //也可以直接使用 往函数体当中传参
  zhAdd(1,2)

   //函数作为参数传递
  mute := CalMute(1, 2, add1)
   fmt.Println(mute)

}

//函数作为类型
type CalculateType func(int,int)
//通过函数类型实现的方法
func (c *CalculateType) Serve() {
   fmt.Println("我是函数类型")
}
//配合函数的类型转换
func add(a,b int){
   fmt.Println(a+b)
}
//配合函数的类型转换
func mul(a,b int) {
   fmt.Println(a*b)
}

//函数作为参数传递
//声明一个函数类型
type CalculateTypeParma func(int,int) int
//配合函数作为参数传递
func add1(a,b int) int {
   return a+b
}
//配合函数作为参数传递
func mul2(a,b int) int {
   return a*b
}
//传入a b 和 函数名称   即 将函数作为参数传递进来
func CalMute(a,b int,f CalculateTypeParma) int {
   return f(a,b)
}

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!