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 |