GO语言:函数的高级用法

147 阅读1分钟
package main

func index(names []string, name string) int {//接受string类型的切片
	for i, getName := range names {
		if getName == name {
			return i
		}
	}
	return -1
}

func include(names []string, name string) bool {
	return index(names, name) >= 0
}

func main(){
	var names = []string{"Tom", "Jack", "Lisa"}//初始化string类型的切片
	include(names, "Tom") //切片作为参数,传递的是地址
}
package main

import "fmt"

func isOk(num int) bool {
	return num % 3 == 0
}

//函数allData接收一个int型切片和一个参数为int返回值为bool类型的函数
//函数allData返回值类型为int型切片
func allData(nums []int, isOk func(int)bool) []int {
	var newNums []int

	for _, num := range nums {
		if isOk(num) == true {
			newNums = append(newNums, num)
		}
	}

	return newNums
}

func main(){
	nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}

	fmt.Println(allData(nums, isOk))
}
package main

import "fmt"

func getab(isOk bool) func(int, int) int {
	if isOk == true {
		return func (a int, b int) int {
			return a + b
		}
	}

	return func (a int, b int) int {
		return a - b
	}
}

func main(){
	a := 10
	b := 20

	fmt.Println(getab(false)(a, b))
}

package main

import "fmt"

func fac(n uint64) (result uint64) {//可以给返回值命名
	if n > 0 {
		result = n * fac(n - 1)
		return result
	}else {
		return 1
	}
}

func main(){
	fmt.Println(fac(10))
}