Golang学习笔记(十一)函数变量,将函数作为值使用

Golang中,函数也可以作为一个变量来使用。
写一个普通函数来让一段字符串,实现大小写交替显示:

func processCase1(str string) string {
	result := ""
	for i, value := range str {
		if i%2 == 0 {
			result += strings.ToUpper(string(value))
		} else {
			result += strings.ToLower(string(value))
		}
	}
	return result
}

再写一个将函数作为变量的函数:

func stringToCase1(str string, myfunc func(string) string) string {
	return myfunc(str)
}

这时在main()里运行stringToCase1()函数,并将上面processcase1()函数作为参数变量使用:

fmt.Println(stringToCase1(str, processCase1))

进一步简化stringToCase1(),使用type关键字让函数变成一个自定义类型。

PS:一般情况下会将type的自定义类型写在main()的上面。

type caseFunc func(string) string

func main() {
    ......
}

func stringToCase2(str string, myfunc caseFunc) string {
	return myfunc(str)
}

这时在main()里运行stringToCase2()函数,并将上面processcase1()函数作为参数变量使用:

fmt.Println(stringToCase2(str, processCase1))

写一个判断奇偶数的例子:

先写一个判断奇数的函数,

func isEven(num int) bool {
	if num%2 == 0 {
		return true
	}
	return false
}

再写一个判断偶数的函数,

func isOdd(num int) bool {
	if num%2 == 0 {
		return false
	}
	return true
}

接着写一个过滤函数,这里的for循环计数变量不需要记录,所以使用了匿名变量。

func filter(arr []int, f myFunc) []int {
	var result []int
	for _, value := range arr {
		if f(value) {
			result = append(result, value)
		}
	}
	return result
}

这样就完成了整个例子所要使用的函数,我们再将申请一个自定义类型,放在main()的上面,来实现所有功能。

type myFunc func(int) bool

func main() {
	var nums = []int{10, 20, 30, 15, 17, 21, 33, 22, 57, 88, 99}
	fmt.Println(filter(nums,isEven))
	fmt.Println(filter(nums,isOdd))
}

最后得到结果:

[10 20 30 22 88]
[15 17 21 33 57 99]

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值