Collection

Array

var name [size]data-type
  • 배열 크기는 고정

  • 이후에 크기를 변경 할 수 없음

  • 초기값을 설정하지 않으면 Zero value

  • [...] 배열 크기 자동 설정

  • len() 배열의 길이

CODE
RESULT
CODE
var arr1 [5]int
fmt.Println(arr1)
var arr2 [5]string
fmt.Println(arr2)
var arr3 [5]float64
fmt.Println(arr3)
arr4 := [5]int{1,2,3,4,5}
fmt.Println(arr4)
var arr5 = [...]int{6,7,8,9,10}
fmt.Println(len(arr5))
RESULT
[0 0 0 0 0]
[ ]
[0 0 0 0 0]
[1 2 3 4 5]
5

Slice

길이가 고정적인 배열과는 다르게 길이를 유동적으로 다룰 수 있음

Nil Slice

길이와 용량이 모두 0

CODE
RESULT
CODE
var arr []int
fmt.Println(arr==nil)
RESULT
true

make()

슬라이스를 생성함과 동시에 슬라이스의 길이(len), 슬라이스의 용량(cap)을 지정 가능

make(타입, 길이(len), 용량(cap))
RESULT
CODE
RESULT
arr:=make([]int, 5 ,10)
fmt.Println("len : ",len(arr),", cap : ",cap(arr))
CODE
len : 5 , cap : 10

slicing

slice나 배열의 특정 영역 추출

변수명[시작인덱스(포함):끝인덱스(불포함)]
  • slicing한 slice나 배열은 포인터가 같은 곳을 가르킴

  • 즉, slicing한 slice의 요소 값을 변경하면 원본 slice의 요소도 변경됨

CODE
RESULT
CODE
arr:=[]int{1,2,3,4,5}
fmt.Println(arr)
sli:=arr[0:3]
fmt.Println(sli)
sli[0]=6
fmt.Println(arr)
fmt.Println(sli)
RESULT
[1 2 3 4 5]
[1 2 3]
[6 2 3 4 5]
[6 2 3]

append

slice에 데이터 추가

  • 슬라이스 용량이 남아있는 경우에는 그 용량 내에서 슬라이스의 길이를 변경하여 데이터를 추가

  • 용량이 초과하는 경우에는 설정한 용량만큼 새로운 배열을 생성, 기존 배열 값들을 모두 새 배열에 복제한 후 다시 슬라이스를 할당

CODE
RESULT
CODE
arr:=make([]int,0,3)
for i:=1; i<=6; i++{
fmt.Println(arr)
fmt.Println("len : ",len(arr),"cap : ",cap(arr))
arr=append(arr,i)
}
RESULT
[]
len : 0 cap : 3
[1]
len : 1 cap : 3
[1 2]
len : 2 cap : 3
[1 2 3]
len : 3 cap : 3
[1 2 3 4]
len : 4 cap : 6
[1 2 3 4 5]
len : 5 cap : 6

copy

slice 복사 후 붙여넣기

CODE
RESULT
CODE
arr1:=[]int{1,2,3,4,5}
arr2:=make([]int,5,5)
arr3:=make([]int,3,3)
copy(arr2,arr1)
copy(arr3,arr1)
fmt.Println("arr1",arr1)
fmt.Println("arr2",arr2)
fmt.Println("arr2",arr3)
RESULT
arr1 [1 2 3 4 5]
arr2 [1 2 3 4 5]
arr2 [1 2 3]

Map

key:value 의 형식으로 값을 저장

var 맵이름 map[key자료형]value자료형
CODE
RESULT
CODE
var m = map[int]string{
10:"ten",
5:"five",
1:"one",
}
fmt.Println(m)
RESULT
map[10:ten 5:five 1:one]

키/밸류 추가

동일한 키 값으로 밸류를 추가하면 덮어씌움

CODE
RESULT
CODE
var m = map[int]string{
10:"ten",
5:"five",
1:"one",
}
m[2]="two"
fmt.Println(m)
RESULT
map[10:ten 5:five 1:one 2:two]

Delete

CODE
RESULT
CODE
var m = map[int]string{
10:"ten",
5:"five",
1:"one",
}
delete(m,10)
fmt.Println(m)
RESULT
map[5:five 1:one]