Передача указателей на функцию в Go
Предварительное условие: указатели в 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
Примечание. Вы также можете использовать оператор краткого объявления (:=) для объявления переменных и указателей в вышеуказанных программах.