배열(array)
- 선언할 때 크기를 정해야 한다.
- 호출 시 복사 전달(값에 의한 호출) - 원본 안바뀜
- 대부분 배열을 사용하지 않는다.
- Go에서 배열의 크기가 배열의 타입의 일부로 간주되는 제한이 있기 때문이다.
- 예를들어,
[3]int
과[4]int
는 다른 타입이다.
슬라이스(slice)
- 호출 시 참조 전달(래퍼런스에 의한 호출) - 원본 바뀜
x = append(x, y)
이런 식으로 할당을 해주어야 함. 복사본이 함수로 전달된 것이기 때문.
cap
: cap이 다 차면 기존 cap의 2배만큼 증가된다.
- 리스트 슬라이스
- 리스트 슬라이스로 만들어진 리스트들은, 같은 리스트 메모리를 공유한다. 하나의 값이 바뀌면, 다른 하나도 같이 바뀐다.
- 연속된 메모리 공간에 데이터가 위치한다
문자열, 룬, 바이트
- 기본적으로 문자열은 불변이다. 이미 할당되어 있는 값을 변경할 수 없다.
- 하지만 할당된 문자열 변수에 값을 재할당 하는 것은 가능하다.
- 문자열에서도 슬라이스 사용이 가능하다.
test = test[2:]
(재할당)
- 문자열에서 하나의 문자를 가져올때는
byte
를 사용한다. var b byte = test[2]
Map
을 Set
으로 사용
- Go에는 set 자료형이 없다. 하지만 map을 사용해서 set처럼 사용할 수 있다.
- 애초에 set, map 둘 다 해시테이블로 구현되어 있음
intSet := map[int]bool{}
vals = []int{5,10,2,5,3,9,1,2,10}
for _, v := range vals {
intSet[v] = true
}
..
익명 구조체
- 외부 데이터를 구조체로 전환하거나 구조체를 외부 데이터로 전환할 때 주로 사용
- JSON, ProtoBuf와 같은 경우
- 테스트를 할 때도 익명 구조체를 사용한다.
f := People{}
err := json.Unmarshal([]byte(`{"name":"Bob","age":30}`), &f)
Share article