Передача указателей на функцию в Go
Предварительное условие: указатели в Go
Указатели в языке программирования Go или Golang — это переменная, которая используется для хранения адреса памяти другой переменной. Вы также можете передавать указатели на функцию, как переменные. Есть два способа сделать это следующим образом:
Создайте указатель и просто передайте его функции
В приведенной ниже программе мы берем функцию ptf , которая имеет параметр указателя целочисленного типа, который указывает функции принимать только аргумент типа указателя. По сути, эта функция изменила значение переменной x . В начале x содержит значение 100. Но после вызова функции значение изменилось на 748, как показано в выводе.
Go
// Go program to create a pointer// and passing it to the functionpackage main import "fmt" // taking a function with integer// type pointer as an parameterfunc ptf(a *int) { // dereferencing *a = 748} // Main functionfunc 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 functionpackage main import "fmt" // taking a function with integer// type pointer as an parameterfunc ptf(a *int) { // dereferencing *a = 748} // Main functionfunc 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
Примечание. Вы также можете использовать оператор краткого объявления (:=) для объявления переменных и указателей в вышеуказанных программах.