Передача указателей на функцию в Go

Опубликовано: 16 Февраля, 2023

Предварительное условие: указатели в Go

Указатели в языке программирования Go или Golang — это переменная, которая используется для хранения адреса памяти другой переменной. Вы также можете передавать указатели на функцию, как переменные. Есть два способа сделать это следующим образом:

Создайте указатель и просто передайте его функции

В приведенной ниже программе мы берем функцию ptf , которая имеет параметр указателя целочисленного типа, который указывает функции принимать только аргумент типа указателя. По сути, эта функция изменила значение переменной x . В начале x содержит значение 100. Но после вызова функции значение изменилось на 748, как показано в выводе.

Go




// Go program to create a pointer
// and passing it to the function
package main
  
import "fmt"
  
// taking a function with integer
// type pointer as an parameter
func ptf(a *int) {
  
    // dereferencing
    *a = 748
}
  
// Main function
func main() {
  
    // taking a normal variable
    var x = 100
  
        fmt.Printf("The value of x before function call is: %d ", x)
  
    // taking a pointer variable
    // and assigning the address
    // of x to it
    var pa *int = &x
  
    // calling the function by
    // passing pointer to function
    ptf(pa)
  
    fmt.Printf("The value of x after function call is: %d ", x)
  
}

Выход:

The value of x before function call is: 100
The value of x after function call is: 748

Передача адреса переменной вызову функции

Учитывая приведенную ниже программу, мы не создаем указатель для хранения адреса переменной x , т.е. как pa в приведенной выше программе. Мы напрямую передаем адрес x вызову функции, который работает так же, как описанный выше метод.

Go




// Go program to create a pointer
// and passing the address of the
// variable to the function
package main
  
import "fmt"
  
// taking a function with integer
// type pointer as an parameter
func ptf(a *int) {
  
    // dereferencing
    *a = 748
}
  
// Main function
func main() {
  
    // taking a normal variable
    var x = 100
      
    fmt.Printf("The value of x before function call is: %d ", x)
  
    // calling the function by
    // passing the address of
    // the variable x
    ptf(&x)
  
    fmt.Printf("The value of x after function call is: %d ", x)
  
}

Выход:

The value of x before function call is: 100
The value of x after function call is: 748

Примечание. Вы также можете использовать оператор краткого объявления (:=) для объявления переменных и указателей в вышеуказанных программах.