>  기사  >  백엔드 개발  >  golang 함수 포인터의 본질과 사용법

golang 함수 포인터의 본질과 사용법

王林
王林원래의
2024-04-26 09:18:01832검색

Go 언어에서 함수 포인터는 함수의 시작 주소를 가리키며 변수에 저장되거나 함수에 전달될 수 있습니다. 함수 포인터를 사용하면 함수를 호출하는 코드와 함수를 구현하는 코드를 분리하는 데 도움이 됩니다. 함수를 저장하거나, 함수를 전달하거나, 함수를 반환하는 데 사용할 수 있습니다. 한 가지 애플리케이션 시나리오는 정렬 가능한 키-값 쌍을 만들고, 함수 포인터를 통해 사용자 정의 정렬 규칙을 정의하고, 키-값 쌍을 값에 따라 오름차순으로 정렬하는 것입니다.

golang 함수 포인터의 본질과 사용법

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는 함수 반환 유형의 값 또는 포인터입니다.
🎜함수 포인터 사용법🎜🎜🎜🎜1. 🎜rrreee 🎜🎜2. 함수에 전달🎜🎜rrreee🎜🎜3. 반환 함수🎜🎜rrreee🎜🎜실용 사례: 정렬 가능한 키-값 쌍을 만드는 함수 유형🎜🎜🎜다음은 함수 포인터를 사용하여 정렬 가능한 항목을 만드는 Go입니다. 키-값 쌍 언어 프로그램: 🎜rrreee🎜출력: 🎜rrreee🎜이 예에서 SortByValue 함수 포인터는 kv 슬라이스의 요소를 정렬하는 사용자 정의 정렬 규칙을 정의합니다. 값 기준 오름차순으로 정렬합니다. 🎜

위 내용은 golang 함수 포인터의 본질과 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.