728x90
Golang에서는 Slice는 C++의 Vector와 Pointer를 섞은 듯한 느낌이다
각각의 선언방법 확인
// c++ array
int array[10]
// golang array
var array [10]int
// c++ vector
std::vector<int> vec;
// golang
var slice []int
slice 사용 예제
// slice 선언 예
var slice []int // 크기가 0인 int형 slice
var slice []int{1,2,3} // [1,2,3]
var slice []int{1, 5:2, 10:3} // [1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3]
var slice = make([]int, 3) // [0, 0, 0] 크기가 3인 int형 slice
// 주의사항
var array = [...]int{1,2,3} // 크기가 고정인 배열 선언
var slice = []int{1,2,3} // slice 선언
// slice 길이
sliceLen = len(slice)
// 슬라이스 순회
var slice = []int{1,2,3}
for i := 0; i < len(slice); ++i
{
slice[i] += 10
}
// range를 이용하면 c++로 치면 tuple 처럼 값을 가져온다.
// i는 index
// v는 요소의 값
for i, v := range slice
{
slice[i] = v * 2
}
// append 이용해서 값 추가
var slice = [int]{1,2,3}
slice = append(slice, 4)
slice2 := append(slice, 5, 6, 7)
// string의 값 바꾸기
var str string = "Hello World"
var slice []byte = []byte(str)
slice[2] = 'a' // == Healo World
슬라이스와 배열의 동작 차이
func changeArray(array2 [5]int)
{
array2[2] = 200
}
func changeSlice(slice2 []int)
{
slice2[2] = 200
}
func main()
{
array := [5]int{1,2,3,4,5}
slice := []int{1,2,3,4,5}
changeArray(array)
changeSlice(slice)
fmt.Println("array:", array) // {1, 2, 3, 4, 5}
fmt.Println("slice:", slice) // {1, 2, 200, 4, 5}
}
위 코드에서 결과를 보면 changeArray()는 값복사, changeSlice()는 주소 복사가 일어난 것을 알 수 있다.
- 출처 : Tucker의 Go 언어 프로그래밍
728x90
'Basic Programming > Golang' 카테고리의 다른 글
Golang - 슬라이스 정렬 (1) | 2023.07.13 |
---|---|
Golang - 슬라이스 요소 삭제/추가 (0) | 2023.07.13 |
Golang - 슬라이스 복제 (0) | 2023.07.13 |
Golang - Slicing (0) | 2023.07.13 |
Golang - Slice append()를 사용할 때 발생하는 문제 (0) | 2023.07.12 |