Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

레빈.키티

Mastering Go 3장 : for, array, slice, map 본문

기술/Mastering Go

Mastering Go 3장 : for, array, slice, map

햇.빛 2019. 8. 31. 12:58

 

이 포스팅에서는 『Go 마스터하기』라는 훌륭한 책의 내용을 따라 간략히 요약합니다.

Go 마스터하기
국내도서
저자 : 미할리스 추칼로스(Mihalis Tsoukalos) / 남기혁역
출판 : 에이콘출판사 2018.10.16
상세보기

 

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