Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

Code Habit

Go ) 맵 사용하기 본문

카테고리 없음

Go ) 맵 사용하기

코드베어 2020. 5. 19. 19:49

맵은 키-값 형태로 자료를 저장한다. 또한 슬라이스와 마찬가지로 레퍼런스 타입이다. 다음과 같이 맵을 선언할 수 있다.

  • var 맵명 map[키_자료형]값_자료형
var a map[string]int // 키는 string, 값은 int인 맵 선언

 

map은 make 함수를 사용하여 공간을 할당해야 값을 넣을 수 있다. 

// make 함수로 키는 string 값은 int인 맵에 공간할당
var a map[string]int = make(map[string]int)
var b = make(map[string]int)
c := make(map[string]int)

 

다음과 같이 map 생성과 동시에 값을 초기화할 수 있다.

a := map[string]int{"Hello":10, "world":20}

b := map[string]int {
    "Hello":10,
    "world":20,
}

fmt.Println(a["Hello"]) // 10
fmt.Println(b["world"]) // 20

 

맵에 데이터를 넣으려면 [](대괄호) 안에 키를 지정하고 값을 대입한다. 마찬가지로 값을 조회할 때도 대괄호 안에 키를 지정하면 된다.

solarSystem := make(map[string]float32) 

solarSystem["Mercury"] = 87.969
solarSystem["Venus"] = 224.70069
solarSystem["Earth"] = 365.25641

fmt.Println(solarSystem["Earth"]) // 365.25641
fmt.Println(solarSystem["pluto"]) // 0

맵에서 존재하지 않는 키를 조회했을 때는 빈 값이 출력된다. ( 정수형 : 0, 문자열 : "" )

 

맵에 데이터가 있는지 검사할 때는 다음과 같이 값을 조회한 뒤 리턴값을 활용한다. 리턴값에서 두 번째 변수에 키의 존재 여부가 저장되며 키가 있으면 true, 없으면 false이다.

value, ok := solarSystem["Pluto"]
fmt.Println(value, ok)	// 0 false

if value, ok := solarSystem["Earth"]; ok {
    fmt.Println(value) // 365.25641
}

 

배열, 슬라이스와 마찬가지로 맵도 for 반복문에서 range 키워드를 사용한다.

  • for 키, 값 := range 맵 { }
for key, value := range solarSystem {
    fmt.Println(key, value)
}

 

range의 리턴값에서 키 변수를 사용하고 싶지 않다면 _(밑줄 문자)를 사용한다.

for _, value := range solarSystem {
    fmt.Println(value)
}

 

맵에서 값을 삭제하려면 delete 함수를 사용한다.

  • delete(맵, 삭제할 키)
a := map[string]int{"Hello":10, "world":20}

delete(a, "world") // 맵 a에서 world키 삭제

fmt.Println(a) // map[Hello:10]

 

맵의 값 안에는 일반 자료형뿐만 아니라 맵 자체도 들어갈 수 있다.

  • map[키자료형]map[키자료형]값자료형
terrestrialPlanet := map[string]map[string]float32{
    "Mercury": map[string]float32{
        "meanRadius": 24397,
        "mass": 3.3022E+23,
        "orbitalPeriod": 87.969,
    },
}

fmt.Println(terrestrialPlanet["Mercury"]["mass"]) // 3.3022E+23

map 키워드의 값 자료형 부분에 게속 map 키워드를 붙여나가면 맵 안에 맵을 만들 수 있다. 맵 안의 하위 항목을 가져오려면 terrestrialPlanet["Mercury"]["mass"]와 같이 키를 연속해서 지정하면 된다.