Level Up Your Web Apps With Go



Download 3,66 Mb.
Pdf ko'rish
bet22/37
Sana01.05.2022
Hajmi3,66 Mb.
#600662
1   ...   18   19   20   21   22   23   24   25   ...   37
Bog'liq
level up your web apps with go

Pointers
When you pass a variable to a function, it receives a copy of the variable, rather
than the variable itself. If you alter a variable inside the function, the code that
called the function will fail to see those changes.
Pointers allow you to pass a reference to an object, rather than the object itself. This
means that you can alter the underlying object, and other areas of your code will
see the updated value rather than a function altering a copy. If you’re coming from
a language that supports pointers, sometimes called "passing by reference", you’ll
be familiar with this concept.
Pointers are best explained by this common everyday scenario: You have a banana,
a pear, a fruit storage locker, and a cloning machine. You create a variable
myFruit
and place a banana in it, then pass that variable into the cloning machine. The
variable that comes out of the cloning machine,
myClonedFruit
then has the pear
put into it. Now
myFruit
has a banana and
myClonedFruit
has a pear. Changing
myClonedFruit
has no effect on
myFruit
.
As you might have guessed, this is what happens when we pass a variable directly
into a function. It creates a new variable for that function, which is a copy, and al-
tering it has no effect on the original variable.
Now let’s look at what happens when we make use of our fruit storage locker. We’ll
start from scratch, so forget about the previous variables. We create a variable
myFruit
15
Welcome New Gopher


and place the banana in it. We then place the variable in the fruit locker, send the
location of the fruit locker to the cloning machine, and receive a new variable
myC-
lonedFruit
. This time we haven’t copied the fruit, we’ve copied the location of the
fruit—the fruit locker. We then put the pear in the fruit locker. We now have two
variables,
myFruit
and
myClonedFruit
, which both have a pear in them, because
they’re both in the same fruit locker.
In this second example, instead of passing a fruit variable into the function, we’ve
passed a pointer to a fruit variable. This pointer points to the address in memory
where the fruit is stored, so when we change the value at that address, both the
function and the calling code are referencing the same value.
So what does this actually look like in Go? Let’s check out an example:
func giveMePear(fruit string) {
fruit = "pear"
}
func main() {
fruit := "banana"
giveMePear(fruit)
fmt.Println(fruit) // Outputs: banana
}
This example passes the
fruit
variable into the
giveMePear
function, which receives
a copy of the fruit and then assigns it:
func giveMePear(fruit *string) {
*fruit = "pear"
}
func main() {
fruit := "banana"
giveMePear(&fruit)
fmt.Println(fruit) // Outputs: pear
}
In the second example, instead of taking a string as a parameter, the
giveMePear
function accepts a pointer to a string—denoted with a
*string
. Inside the function
we assign a new string into the value that the pointer references, again using the
*
symbol. When we call the function, instead of just passing in the variable
fruit
,
Level Up Your Web Apps With Go
16


we take the address of the variable. We do this by prepending the variable with an
ampersand,
&
. This tells Go that we have no interest in the variable itself, just a
pointer to the variable, which is where that variable is in memory.
At this point, don’t worry if you’re struggling to fully understand the concept of
pointers. We’ll see them in action soon, and it is hoped you’ll build up an under-
standing as we continue on through the book.

Download 3,66 Mb.

Do'stlaringiz bilan baham:
1   ...   18   19   20   21   22   23   24   25   ...   37




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish