Go 1.21新增的 slices 包提供了很多和切片相关的函数

slices.BinarySearch

package main

import (
	"fmt"
	"slices"
)

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

	// 查找 5
	index, found := slices.BinarySearch(nums, 5)
	fmt.Printf("5 的位置: %d, 是否找到: %v\n", index, found) // 输出: 5 的位置: 2, 是否找到: true

	// 查找 6(6 不在 nums 中)
	index, found = slices.BinarySearch(nums, 6)
	fmt.Printf("6 的插入位置: %d, 是否找到: %v\n", index, found) // 输出: 6 的插入位置: 3, 是否找到: false

}

slices.Max

package main

import (
	"fmt"
	"slices"
)

func main() {
	var arr []int = []int{1, 2, 33, 4, 6, 123, 4444, 12}
	res := slices.Max(arr)
	fmt.Println(res)
}

slices.MaxFunc

package main

import (
	"cmp"
	"fmt"
	"slices"
)

func main() {
	type Person struct {
		Name string
		Age  int
	}
	people := []Person{
		{"Alice", 25},
		{"Bob", 30},
		{"Charlie", 35},
		{"David", 40},
		{"Eve", 45},
	}
	firstOldes := slices.MaxFunc(people, func(a, b Person) int {
		return cmp.Compare(a.Age, b.Age)
	})
	fmt.Println("The oldest person is:", firstOldes.Name)
}

返回里面人最老的

slices.Min

package main

import (
	"fmt"
	"slices"
)

func main() {
	arr := []int{1, 2, 3, 45, 5, 6, 6, 78}
	minNum := slices.Min[[]int](arr)
	fmt.Println(minNum)

}

slices.MinFunc

package main

import (
	"cmp"
	"fmt"
	"slices"
)

func main() {
	type Person struct {
		Name string
		Age  int
	}
	var personArr []Person = []Person{
		{"Tom", 20},
		{"Jerry", 18},
		{"Alice", 22},
	}

	minNum := slices.MinFunc[[]Person](personArr, func(a, b Person) int {
		return cmp.Compare[int](a.Age, b.Age)
	})
	fmt.Println(minNum)

}

slices.Replace

package main

import (
	"fmt"
	"slices"
)

func main() {
	names := []string{"Alice", "Bob", "Vera", "Zac"}
	names = slices.Replace(names, 1, 3, "Bill", "Billie", "Cat")
	fmt.Println(names) // [Alice Bill Billie Cat Zac]
}

slices.Reverse

package main

import (
	"fmt"
	"slices"
)

func main() {
	arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	slices.Reverse[[]int](arr)
	fmt.Println(arr)
}

slices.Sort

package main

import (
	"fmt"
	"slices"
)

func main() {
	arr := []int{5, 4, 132, 1, -3, 43}
	slices.Sort[[]int](arr)
	fmt.Println(arr)
}

package main

import (
	"fmt"
	"slices"
)

func main() {
	arr := []int{1, 2, 3, 5, -1, 30, 404, 23}
	slices.SortFunc[[]int](arr, func(a, b int) int {
		return b - a
	})
	fmt.Println(arr)
}