반응형
문제
GoLang은 2차원 slice부터 값을 추가할 때.
slice에 len(length)과 cap(capacity)을 지정하지 않으면 인덱스를 통한 접근에서 에러가 발생합니다.
다음이 에러가 발생하는 예제입니다.
package main
func main() {
var slices [][]int
for i := 0; i < 3; i++ {
for j := 0; j < 5; j++ {
slices[i][j] = i + j
}
}
}
에러는 다음과 같습니다.
panic: runtime error: index out of range [0] with length 0
panic: runtime error: index out of range [0] with length 0
goroutine 1 [running]:
main.main()
C:/~/code/go/learn-go/ex/ex4.go:9 +0x1e
exit status 2
처음 저 에러를 맞닥뜨리게 되면 혼란스러울 것입니다.
분명 내가 배웠던 slice는 cap, len을 지정 안 해도 메모리 공간이 부족하면
기존의 크기에서 2배로 늘리기에 자동으로 메모리를 할당 받으므로 크기를 지정하지 않아도 알아서 잘 될텐데라는 생각하면서 말이죠
해결법
해결법은 간단합니다.
slices에서 접근할 수 없는 인덱스를 사용해서 에러가 났다면 인덱스를 사용하지 않게 수정합니다.
Q : 예? 그게 무슨 말이죠?A : 간단합니다
아래 방법처럼 이차원 slice에 일차원 slice를 append 하는 방법으로 해결할 수 있습니다.
package main
import "fmt"
// 2차원 슬라이스
func main() {
var slices = [][]int{}
for i := 0; i < 3; i++ {
var slice = []int{}
for j := 0; j < 5; j++ {
slice = append(slice, i+j)
}
slices = append(slices, slice)
}
fmt.Println(slices)
}
결과 값은 다음처럼 정상적으로 출력됩니다.
[[0 1 2 3 4] [1 2 3 4 5] [2 3 4 5 6]]
반응형
'Go Lang > Error' 카테고리의 다른 글
Go Echo "github.com/labstack/echo/v4" 에러 해결 법 (0) | 2022.08.05 |
---|---|
[Go lang] exit status 259 에러 (0) | 2022.08.03 |