go 语言将函数作为入参

时间:2022-11-25 21:09:58
go 语言可以直接将函数作为参数传入函数中
定义需要传入的函数 
func minMaxComp(v1, v2 int)(r int)  {
	if v1 == v2 {
		r = 1
		return
	}

	if v1 > v2 {
		r = 2
		return
	}

	r = 3
	return
}
定义主函数
func min2maxSort(array []int,
                  comp func(value1,value2 int) int)(targetArray []int)  {
	targetArray = append(targetArray, array[0])
	for j:= 1; j < len(array) ; j++ {
		targetArray = append(targetArray, array[j])
		for i, last := len(targetArray) -2 , len(targetArray)-1; i >= 0;  i--{
			result := comp(targetArray[i], targetArray[last]);
			if result == 2 {
				targetArray[i], targetArray[last] = targetArray[last], targetArray[i]
				last = i
				//todo swap last , i
			}
		}

	}
	return
}
调用测试
func TestMin2MaxSort(t *testing.T)  {
	array := []int{ 1,2,3,4,4,2,3,1}
	sortArray := min2maxSort(array, minMaxComp)
	if nil == sortArray{
		t.Error("Sort Error!")
		return
	}

	tmpArray := []int{1,1,2,2,3,3,4,4}
	if !equals(sortArray,tmpArray) {
		t.Error("Sort Error!")
		return
	}