Go 언어에서 함수 포인터는 함수의 시작 주소를 가리키며 변수에 저장되거나 함수에 전달될 수 있습니다. 함수 포인터를 사용하면 함수를 호출하는 코드와 함수를 구현하는 코드를 분리하는 데 도움이 됩니다. 함수를 저장하거나, 함수를 전달하거나, 함수를 반환하는 데 사용할 수 있습니다. 한 가지 애플리케이션 시나리오는 정렬 가능한 키-값 쌍을 만들고, 함수 포인터를 통해 사용자 정의 정렬 규칙을 정의하고, 키-값 쌍을 값에 따라 오름차순으로 정렬하는 것입니다.
Go 언어의 함수 포인터
함수 포인터는 함수에 대한 포인터입니다. Go에서 함수는 일급 값이므로 변수에 저장하거나 함수에 전달하거나 함수에서 반환할 수 있습니다. 함수 포인터를 사용하는 주요 이점은 함수를 구현하는 코드에서 함수를 호출하는 코드를 분리한다는 것입니다.
함수 포인터의 본질
함수 포인터는 본질적으로 함수 항목 주소를 가리키는 포인터입니다. Go 언어에서 함수 포인터의 유형은 func(*args)(*result)
입니다. 여기서 func(*args)(*result)
,其中:
*args
是函数参数类型的指针*result
是函数返回类型的值或指针函数指针的用法
1. 存储函数
func add(a, b int) int { return a + b } func main() { // 将 add 函数存储在变量 f 中 f := add // 通过 f 调用 add 函数 fmt.Println(f(1, 2)) // 输出:3 }
2. 传递给函数
func apply(f func(int) int, arg int) int { return f(arg) } func main() { // 将 add 函数传递给 apply 函数 result := apply(add, 10) fmt.Println(result) // 输出:11 }
3. 返回函数
func getAdder(val int) func(int) int { return func(arg int) int { return val + arg } } func main() { // 获得一个返回 10 加数的函数 add10 := getAdder(10) // 使用 add10 函数 fmt.Println(add10(20)) // 输出:30 }
实战案例:创建可排序键值对的函数类型
以下是一个使用函数指针创建可排序键值对的 Go 语言程序:
type kv struct { key string val int } func (kv *kv) SortByValue() { sort.Slice(kv, func(i, j int) bool { return kv[i].val < kv[j].val }) } func main() { kvList := []*kv{ {"key1", 10}, {"key2", 5}, {"key3", 15}, } kvList.SortByValue() for _, kv := range kvList { fmt.Println(kv.key, kv.val) } }
输出:
key2 5 key1 10 key3 15
在这个例子中,SortByValue
函数指针定义了一个自定义排序规则,将 kv
*args
는 함수 매개변수입니다. type Pointer*result
는 함수 반환 유형의 값 또는 포인터입니다.SortByValue
함수 포인터는 kv
슬라이스의 요소를 정렬하는 사용자 정의 정렬 규칙을 정의합니다. 값 기준 오름차순으로 정렬합니다. 🎜위 내용은 golang 함수 포인터의 본질과 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!