More types: structs slices and maps
Pointers
- 메모리 주소를 값으로 가지고 있는 변수
*T
은 T 타입 포인터이며 제로값은 nil 이다.- 연산자 & 을 적용하면 변수의 메모리 주소 값을 리턴한다.
i := 42
p := &i
c := &p
- 포인터에 연산자 * 을 붙이면 포인터가 가리키고 있는 값을 의미한다.
- dereferencing 또는 indirecting 이라고 부른다.
*p = 2
- Go 에서 포인터 연산이 없다.
Struct
- 속성들의 모임
type Vertex struct {
X int
Y int
}
- 구조체의 속성은 . 을 사용해 접근 한다.
v := Vertex{1, 2}
v.X = 2
- 구조체 포인터의 속성도 . 을 사용해 접근 하게 언어에서 허용한다.
v := Vertex{1, 2}
p := &v
p.X = 2 // (*p).X = 2 와 동일.
Struct literals
- 값 나열로 구조체를 만들 수 있는 문법을 제공한다.
&
을 붙이면 구조체의 포인터를 리턴한다.
v1 = Vertex{1, 2} // has type Vertex
v2 = Vertex{X: 1} // Y:0 is implicit
v3 = Vertex{} // X:0 and Y:0
p = &Vertex{1, 2} // has type *Vertex
Arrary
- 어레이는
[n]T
형식으로 선언하며 어레이는 n개의 타입 T 값을 가지고 있다. - 어레이의 길이는 타입의 일부분이라고 정의한다. 그래서 어레이의 길이를 변경 할 수 없다.
var a [2]string
a[0] = "A"
a[1] = "B"