Golang 컬렉션 - Go series(7)

Date:     Updated:

Categories:

Tags: ,

image

배열

  • 일차원 배열

    • 선언 : var 변수명 [배열크기] 데이타타입으로 선언을 한다.
    • 배열을 정의하면서 초기값을 설정하는 것은 데이터타입 이후에 중괄호로 표시한다. 이 때 […]을 사용하면 요소 숫자만큼 크기가 정해진다.
    func main(){
        var arr [3]int // 선언
        var arr2 = [3]int{1,2,3} // 선언과 동시에 대입
        var arr3 = [...]int{1,2,3,4} // 크기가 4로 자동지정
    }
    
  • 다차원 배열

    • 선언 : var 변수명 [배열크기][배열크기 . . . ]데이터타입
      func main(){
        var arr [2][3]int
        var arr2 = [2][3]int{
            {1,2,3},
            {4,5,6}, // 끝에도 콤마가 있다.
        }
      }
      

슬라이스

동적 크기의 배열을 슬라이스라고 한다.(파이썬의 리스트)

  • 선언 : 배열과 같다. 하지만 크기부분은 없다.

    • 예시 : var slicearr []int
  • 다른 방법으로도 선언할 수 있다

    • 내장함수 make() 사용
      • 길이와 용량을 임의로 지정해서 시작할 수 있는 슬라이스 생성 방법이다.
      • 첫 번째 파라미터에 타입, 두 번째에 길이, 세 번째는 내부배열에서의 최대 길이를 지정한다. 그러면 모든 요소가 0인 슬라이스가 생성이 된다. 이 때 세 번째는 생략할 수 있는데 생략 시 두 번쨰인 길이와 같은 값을 갖는다. 슬라이스의 길이와 용량은 len()과 cap()을 사용하여 확인할 수 있다.
        func main(){
          slice_temp := make([]int, 5, 10)
        }
        
      • 용량과 길이를 둘 다 지정하지 않는다면 길이와 용량이 0인 슬라이스가 되는데 이를 Nil slice라고 한다. nil과 비교도 가능.
        func main(){
          nil_slice := make([]int)
          if nil_slice == nil{
              println("NIL!")
          }
        }
        
  • 부분 슬라이스

    • 파이썬과 같은 기능이다.
    func main(){
        a := []int{3,4,5,6,7,8,9}
        println(a[2:5]) // 5,6,7
    }
    
    
  • append와 copy

    • append(병합)
      • 추가가 가능하다.
      • append의 작동
        • 슬라이스 용량이 남아있는 경우 -> 용량 내에서 슬라이스의 길이를 변경하여 추가함.
        • 슬라이스 용량이 초과하는 경우 -> 현 용량의 2배에 해당하는 새 array를 생성후 복제하여 할당함.

Map

Key : value의 해시테이블을 구현한 자료구조이다.

  • 선언 : map[Key타입]Value타입

    • 위 방식으로 선언하면 nil값을 가지며 아무 데이터도 쓸 수 없다. 따라서 초기화를 위해 make()함수를 사용하여야 한다. 혹은 리터럴로 초기화를 한다.
      var map_temp map[int]int
      map_temp2 = make(map[int]int)
      map_temp3 := map[int]int{
          1:2,
          3:4,
      }
      
  • Map 키 체크

    • Go는 해당 값을 읽을때도 map변수[찾을키] 의 포맷을 이용하지만, 사실 저렇게 읽게 되면 반환값은 두 개 이다.
    • 첫 번째로 반환되는 값이 키에 해당하는 값, 두 번째는 존재하는지 여부이다
      func main(){
        temp := map[int]int{
            1:10,
            2:20,
            3:30,
        }
        onevalue, oneexists = temp[1] // 1과 true가 리턴됨
        fourvalue, fourexists = temp[4] // nil과 false가 리턴됨
      }
      

Leave a comment