레빈.키티
Mastering Go 3장 : for, array, slice, map 본문
이 포스팅에서는 『Go 마스터하기』라는 훌륭한 책의 내용을 따라 간략히 요약합니다.
![]() |
|
for
golang의 루프는 for 가 유일합니다. 다양한 for 구문이 존재해서 while, do while를 대체할 수 있습니다.
// 우리가 아는 그 for 문, continue와 break도 C와 동일
for i := 0; i < 5; i++ {
if i == 1 {
continue
}
fmt.Println(i)
if i == 2 {
break
}
}
// while
for i < 5 {
fmt.Println(i)
i++
}
// do .. while
for ok := true; ok; ok = expression {
}
// range
arr := [5]int{1, 2, 3, 4, 5}
for i, v := range arr {
fmt.Println(i, v)
}
array
배열은 다음과 같이 쓸 수 있으나 배열 쓸 바에 슬라이스 쓰세요.
또한 배열은 기본적으로 Call By Value 임에 주의.
// 일차원 배열
arr := [2]int{1, 2}
// 이차원 배열
arr2 := [2][2]int{{1, 2}, {1, 2}}
// 배열 길이
len(arr)
slice
슬라이스는 동적으로 크기가 변경될 수 있는 배열입니다.
C 공부할 때 사이즈가 작아지면 두 배 사이즈로 만들어주는 배열 구현을 공부해보셨다면... 바로 그것이 슬라이스입니다.
이 친구는 기본이 Call By Reference 입니다.
// 슬라이스 리터럴 생성 (크기 미지정에 주목)
aSliceLiteral := []int{1, 2, 3}
// 빈 슬라이스는 이렇게 - 실제로는 각 타입의 0에 해당하는 값으로 초기화됩니다.
aSlice := make([]int, 10)
// 2차원 슬라이스
twoSlice := make([][]int, 10)
for _, v := range twoSlice {
v = make([]int, 10)
}
// 지울 때는 이렇게 - GC가 나중에 날려줄꺼에요
aSlice = nil
// Slice 마지막 원소 접근
aSlice[len(aSlice)-1]
// re-slicing. 새로운 슬라이스가 아니라, 기존 슬라이스를 참조함에 주의!
sliceA := []int{1, 2, 3, 4}
sliceB := sliceA[1:3]
// 슬라이스의 용량. 슬라이스 내부에 만들어져있는 실제 배열의 길이. Len과는 다릅니다!
cap(slice)
// Byte Slice : 파일 입출력에서 사용해요
in := make([]byte, 10)
// copy : source와 target의 길이에 주의하세요
copy(targetSlice, sourceSlice)
// sort -> Golang 1.8 이상부터 지원
// slice와 정렬할 기준 함수를 넣어주시면 됩니당
sort.Slice(slice, func(i, j int) bool {
return slice[i].a < slice[j].a
})
map
STL에서 보던 그 맵입니다.
// 맵 생성 : 키는 string, 값은 int
aMap := make(map[string]int)
// 키를 통한 삭제
delete(aMap, "key1")
// 루프
for key, value := range aMap {
}
// 키가 있는지 확인
v, ok := aMap["key2"]
if ok {
// 키 있음!
} else {
// 키 없음!
}
'기술 > Mastering Go' 카테고리의 다른 글
Mastering Go 3장: 연습문제 (0) | 2019.08.31 |
---|---|
Mastering Go 3장: 상수, 포인터, 날짜와 시간 (0) | 2019.08.31 |
Comments