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
}
}