ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Go - Map
    개발 모음집/GoLang 2021. 1. 19. 06:04
    // Map은 키(Key)에 대응하는 값(Value)을 신속히 찾는 해시테이블(Hash table)을 구현한 자료구조
    
    // "map[Key타입]Value타입" 과 같이 선언
    
    var idMap map[int]string
    
    /*
    이때 선언된 변수 idMap은 (map은 reference 타입이므로) nil 값을 갖으며, 
    이를 Nil Map이라 부른다.
     Nil map에는 어떤 데이타를 쓸 수 없는데, map을 초기화하기 위해 make()함수를 사용할 수 있다 
    (map 리터럴을 사용할 수도 있는 이는 아래 참조).
    
    */
    
    idMap = make(map[int]string)
    /*
    map은 make() 함수를 써서 초기화할 수도 있지만,
     리터럴(literal)을 사용해 초기화할 수도 있다.
     리터럴 초기화는 "map[Key타입]Value타입 { key:value }" 와 같이
     Map 타입 뒤 { } 괄호 안에 "키: 값" 들을 열거하면 된다.
    */
    
    //리터럴을 사용한 초기화
    tickers := map[string]string{
        "GOOG": "Google Inc",
        "MSFT": "Microsoft",
        "FB":   "FaceBook",
    }
    
    package main
     
    func main() {
        var m map[int]string
     
        m = make(map[int]string)
        //추가 혹은 갱신
        m[901] = "Apple"
        m[134] = "Grape"
        m[777] = "Tomato"
     
        // 키에 대한 값 읽기
        str := m[134]
        println(str)
     
        noData := m[999] // 값이 없으면 nil 혹은 zero 리턴
        println(noData)
     
        // 삭제
        delete(m, 777)
    }
    /*
    map을 사용하는 경우 종종 map안에 특정 키가 존재하는지를 체크할 필요가 있다. 
    이를 위해 Go에선 "map변수[키]" 읽기를 수행할 때 2개의 리턴값을 리턴한다.
    첫번째는 키에 상응하는 값이고, 두번째는 그 키가 존재하는지 아닌지를 나타내는 bool 값이다. 
    즉, 아래 예제에서 val, exists := tickers["MSFT"] 의 val 에는 Microsoft라는 값이 리턴되고,
    변수 exists에는 키가 존재하므로 true가 리턴된다.
    */
    
    
    package main
     
    func main() {
        tickers := map[string]string{
            "GOOG": "Google Inc",
            "MSFT": "Microsoft",
            "FB":   "FaceBook",
            "AMZN": "Amazon",
        }
     
        // map 키 체크
        val, exists := tickers["MSFT"]
        if !exists {
            println("No MSFT ticker")
        }
    }
    package main
     
    import "fmt"
     
    func main() {
        myMap := map[string]string{
            "A": "Apple",
            "B": "Banana",
            "C": "Charlie",
        }
     
        // for range 문을 사용하여 모든 맵 요소 출력
        // Map은 unordered 이므로 순서는 무작위
        for key, val := range myMap {
            fmt.Println(key, val)
        }
    }

    '개발 모음집 > GoLang' 카테고리의 다른 글

    Go - Interface  (0) 2021.01.19
    Go - Slice  (0) 2021.01.19
    Go - Array  (0) 2021.01.19
    [GO] GO Run, Build, Install  (0) 2020.05.30
Designed by Tistory.