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"

Slice