Golang

Pointers

느리지만 꾸준하게 2021. 12. 12. 01:02

Go는 높은 수준의 코드로 Low-level Programming을 하도록 해준다고 한다.

여기서는 간단하게 &와 *를 살펴보자.

 

하기전에 아래 코드를 보면 10과 2가 출력된다.

package main

import "fmt"

func main() {
	a := 2
	b := a
	a = 10
	fmt.Println(a, b)
}

// 10 2

 

&을 추가하면 메모리 주소를 볼 수가 있다. a는 메모리 주소가 12088인 곳에 있고

b는 메모리 주소가 120a0인 곳에 있다고 볼 수 있다.

package main

import "fmt"

func main() {
	a := 2
	b := 5
	fmt.Println(&a, &b)
}

// 0xc000012088 0xc0000120a0

이제는 b가 a의 메모리를 살펴보고 있는지를 한번 보자.

package main

import "fmt"

func main() {
	a := 2
	b := &a
	fmt.Println(&a, b)
}

// 0xc000012088 0xc000012088

*도 이용해보면 *는 기본적으로 살펴보거나 훑어본다는 느낌으로 사용이 된다. 즉 메모리의 주소를 살펴볼 수 있다.

아래를 보면 b는 a의 메모리 주소값이고 2가 나타나는 것을 볼 수 있다.

메모리에 저장된 object를 똑같이 서로 가지고 싶어할 때 사용이 되어진다.

package main

import "fmt"

func main() {
	a := 2
	b := &a
	fmt.Println(*b)
}

// 2

아래코드에서 b는 a의 메모리 주소에 연결이 되어있고 a가 바뀌면 b는 a의 메모리를 살펴보고 당연하게 값이 바뀌게 된다.

package main

import "fmt"

func main() {
	a := 2
	b := &a
	a = 5
	fmt.Println(*b)
}

// 5

 

b를 가지고도 a의 값을 변경 시킬 수 있다. b를 이용해서 a의 값을 변경 시킬 수 있는 것이다.

b는 a의 주소와 연결이 되어있는데 아래를 보면 a가 20이 되었다.

package main

import "fmt"

func main() {
	a := 2
	b := &a
	*b = 20
	fmt.Println(a)
}

// 20

 

 

 

 

 

 

 

 

 

<출처 노마드 코더: 쉽고 빠른 Go 시작하기>

https://nomadcoders.co/go-for-beginners/lobby

 

Watch Now – 노마드 코더 Nomad Coders

 

nomadcoders.co

 

'Golang' 카테고리의 다른 글

Maps & Structs  (0) 2021.12.12
Arrays & Slices  (0) 2021.12.12
if & switch  (0) 2021.12.12
for&range&args  (0) 2021.12.12
Functions (2)  (0) 2021.12.11