728x90

struct와 관련해서 포인터 변수로 선언할 수 있다.

package main

import (
"fmt"
)

type Point struct {
X, Y float64
}

func main() {
var p *Point
p = &Point{1, 2}

var p1 *Point = &Point{3,4}

var p2 = &Point{5,6}

p3 := &Point{7,8}
fmt.Println(p, p.X, p.Y)
fmt.Println(p1, p1.X, p1.Y)
fmt.Println(p2, p2.X, p2.Y)
fmt.Println(p3, p3.X, p3.Y)
}

포인터 변수로 선언하는 방법은 여러가지 방법이 있다.

하나씩 보도록 하자.


var p *Point
p = &Point{1, 2}

전형적인 방법으로 선언을 하고 아랫줄에서 초기화를 하는 방식이다.


var p1 *Point = &Point{3,4}

이 방식은 초기화와 동시에 선언을 하는 방식이다.

하지만 이 선언은 불필요하게 중복되어 있다.


var p2 = &Point{5,6}

중복된 부분을 지우면 이렇게 된다.


p3 := &Point{7,8}

초기화와 겸한다면 이렇게도 표현할 수 있다.

한번 출력해보자.



출력해보면 제대로 출력되는걸 확인할 수 있다.


이제 struct와 초기화에 대해서 살짝 논해보자.


package main

import (
"fmt"
)

type Point struct {
X, Y float64
}

func main() {
p := Point{1, 2}
q := &Point{3, 4}
r := Point{X: 5}
s := Point{}
t := new(Point)
fmt.Println(p)
fmt.Println(q)
fmt.Println(r)
fmt.Println(s)
fmt.Println(t)
}

이 구문은 굳이 포인터 뿐만이 아니라 여러가지 초기화 방법을 볼 수 있다.

먼저 실행해서 결과를 보도록 하자.



보면 의도대로 됬는지 보도록 하자.

여러분이 모를만한걸 설명해 드리겠다.


r := Point{X: 5}

초기화시에 특정 값만 이름으로 넣을 수있다.

위의 경우에는 X만 5를 넣는다. 이렇게 되면 초기화 안한 값은 0이된다.


s := Point{}

같은 논리로 아무값도 초기화 하지 않을 경우 0으로 초기화된다.


t := new(Point)

여기서 new를 사용하면 나머지 값은 0으로 초기화된다.

그리고 포인터로 반환된다.

즉 t는 포인터 변수가 되는 것이다.


'Programming > Go' 카테고리의 다른 글

[Go-14]함수와 클로저, 그리고 고차함수와 익명함수(람다함수)  (0) 2019.02.18
[Go-13]range와 범위  (0) 2019.02.17
[Go-11]struct와 객체  (0) 2018.09.02
[Go-10]함수(function)  (0) 2018.09.01
[Go-09]맵(Map)  (0) 2018.08.31

+ Recent posts