1. 슬라이스 초기화
var x = []int{1, 2, 3, 4, 5}
| 슬라이스는 [], 배열은 [...]
2. nil 로만 비교 가능
var x2 = []int{1, 2, 3, 4, 5}
fmt.Println(x == x2)
// invalid operation: x == x2 (slice can only be compared to nil)
var empty []int
fmt.Println(empty)
fmt.Println(empty == nil) // slice는 오직 nil 로만 비교 가능
3. append
var a []int
fmt.Println("a length:", len(a))
a = append(a, 5)
fmt.Println("a length:", len(a), a)
a = append(a, 1, 2, 3)
fmt.Println("a length:", len(a), a)
a length: 0 []
a length: 1 [5]
a length: 4 [5 1 2 3]
- append는 복사본을 반환한다. 해당 값을 변수에 할당하지 않으면 오류를 발생시킨다.
append(a, 4, 10) // append(a, 4, 10) (value of type []int) is not used
4. Capacity
// Capacity
var str = []string{"a", "b", "c"}
fmt.Println(str, len(str), cap(str))
str = append(str, "d")
fmt.Println(str, len(str), cap(str))
str = append(str, "e", "f")
fmt.Println(str, len(str), cap(str))
[a b c] 3 3
[a b c d] 4 6
[a b c d e f] 6 6
cap
을 사용하여 수용크기(Capacity)를 확인할 수 있다.make
를 사용하여 지정된 Capacity를 갖는 슬라이스를 만들 수 있다.
5. make
var top5_fruits = make([]string, 5)
fmt.Println(top5_fruits, len(top5_fruits), cap(top5_fruits))
top5_fruits[0] = "apple"
top5_fruits[1] = "banana"
fmt.Println(top5_fruits, len(top5_fruits), cap(top5_fruits))
[ ] 5 5
[apple banana ] 5 5
- len, cap이 5인 슬라이스를 만든다.
var rank = make([]int, 5, 10)
fmt.Println(rank, len(rank), cap(rank))
[0 0 0 0 0] 5 10
- length가 5, capacity가 10인 슬라이스를 만들었다.
6. Slicing
var t = []int{1, 2, 3, 4, 5}
var t1 = t[:3]
var t2 = t[:]
fmt.Println(t)
fmt.Println(t1)
fmt.Println(t2)
t[0] = 10
fmt.Println(t2)
[1 2 3 4 5]
[1 2 3]
[1 2 3 4 5]
[10 2 3 4 5]
- 마지막 t2의 결과처럼 하위 슬라이스는 부모 슬라이스의 메모리를 공유한다.
7. Copy
source := []string{"apple", "banana", "kiwi"}
target := make([]string, 3)
num := copy(target, source)
fmt.Println(target, num)
// length 크기에 따라 복사
target2 := make([]string, 2)
num = copy(target2, source)
fmt.Println(target2, num)
copy
는 독립적인 슬라이스를 생성한다.copy
는 두 개의 파라미터를 받는다. 첫 번째는 대상, 두 번째는 원본이다. 본사된 요소의 개수를 반환한다.
반응형
'Go' 카테고리의 다른 글
Go - 배열 초기화 및 사용 방법 (0) | 2022.09.28 |
---|---|
Go - 문제해결: Error loading workspace: gopls was not able to find modules in your workspace. (0) | 2022.09.27 |
Go - 숫자(int)를 문자열(string)로 변환 ( 함수 별 벤치마킹 ) (0) | 2022.09.13 |