[Go tutorial] Go 정리하기 - 3
Go-tour 참조
구름edu 참조
맵(map)
키와 value의 조합을 나타내기 위한것으로 파이썬의 딕셔너리를 생각하자.
var 맵이름 map[key자료형]value자료형 으로 선언
- var a map[int]string :: key가 int이고 value가 string인 맵 a
선언만 하고 초기화하지 않는다면 Nil map 이다.
데이터 추가 or 갱신 :: 맵이름[key] = value 를 이용
데이터 삭제 :: delete(맵이름,key) 를 이용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21func main() {
//지역번호와 지역 저장
var m = make(map[string]string)
m["02"] = "서울특별시"
m["031"] = "경기도"
m["032"] = "충청남도"
m["053"] = "대구광역시"
fmt.Println(m)
//동일한 key값으로 value값을 저장하면 갱신이 된다
m["032"] = "인천"
fmt.Println(m)
//m에 있는 "031"key의 value와 함께 삭제
delete(m, "031")
fmt.Println(m)
}key체크, value 확인
“맵이름[key]” 는 value와 키가 존재하는지 여부를 반환한다.
존재하지 않는 키값이라면 자료형에따라 0 혹은 “” 를 반환
해당 키가 존재하는지 여부에 따라 true/false 반환
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16func main() {
m := make(map[string]int)
m["Answer"] = 42
fmt.Println("The value:", m["Answer"])
## print : The value: 42
m["Answer"] = 48
fmt.Println("The value:", m["Answer"])
## print : The value: 48
delete(m, "Answer")
fmt.Println("The value:", m["Answer"])
## print : The value: 0
v, ok := m["Answer"]
fmt.Println("The value:", v, "Present?", ok)
## print : The value: 0 Present? false
}
함수 클로져
클로져는 함수 안에서 익명 함수를 정의해 바깥쪽 함수에서 선언한 변수에도 접근할 수 있는 함수를 뜻한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
pos, neg := adder(), adder()
for i := 0; i < 10; i++ {
fmt.Println(
pos(i),
neg(-2*i),
)
}
}위의 예에서 adder() 함수는 지역 변수 sum 을 초기화하고 입력받는 x를 더해주는 익명 함수를 반환합니다.
for문에서 함수가 실행될때마다 지역 변수가 초기화되지않고 더해주는 익명함수만을 통해 값이 지속적으로 증가/감소 하는것을 확인할 수 있습니다.