golang中将函数当做函数参数使用

package main

import (
	"fmt"
	"strings"
)

// 使用type关键字让函数变成一个自定义类型
type caseFunc func(string) string
type funcOddEven func(int) bool

func main() {
	/* 将函数名当做实参进行传递 */
	strToCase1("hello World!", ProcessCase1)  // 字母大小交替显示

	var nums = []int{10, 20, 30, 15, 17, 21, 33, 22, 57, 88, 99}
	filterOddEven(nums, isOdd)  // 奇数
	filterOddEven(nums, isEven)  // 偶数
}

func strToCase1(str string, myFunc caseFunc) string {
	/* 定义一个函数,它的形参接收的是函数 */
	return myFunc(str)
}

func ProcessCase1(str string) (result string) {
	/* 处理字符串大小写交替显示 */
	for i, value := range str {
		if i%2 == 0 {
			result += strings.ToUpper(string(value))
		} else {
			result += strings.ToLower(string(value))
		}
	}
	fmt.Println(result)
	return result
}

func filterOddEven(arr []int, f funcOddEven) (result []int) {
	for _, value := range arr {
		if f(value) {
			result = append(result, value)
		}
	}
	fmt.Println(result)
	return
}

func isOdd(num int) bool {
	// 是奇数
	if num%2 != 0 {
		return true
	} else {
		return false
	}
}

func isEven(num int) bool {
	// 是偶数
	if num%2 == 0 {
		return true
	} else {
		return false
	}
}

  

posted @ 2021-09-28 15:12  专职  阅读(993)  评论(0编辑  收藏  举报