Meandering Trajectory

Go 언어: 빈 슬라이스와 nil 본문

컴퓨터/GoLang

Go 언어: 빈 슬라이스와 nil

latentis 2017. 10. 20. 02:55

Go에는 슬라이스라는 확장 가능한 배열이 있다.


다음과 같이 선언한 뒤 사용한다.

var s []int
s = append(s, 1, 2, 3)

다음과 같이 변수 선언만 한 경우

var s []int

슬라이스는 값은 무엇일까? 정답은 nil이다.

그런데 이렇게 선언만 된 슬라이스의 동작은 기묘하다. 예를 들어 다음과 같이 선언만 된 슬라이스를 출력하면

var s []int

fmt.Println(s)

결과는 <nil>이 아니라

[]

 즉 빈 문자열이다. 심지어 이  슬라이스의 길이도 구할 수가 있다.

fmt.Println(len(s)

결과는 0이다. 슬라이스 자체를 출력했을 때 빈 문자열이 출력된 것과 결이 맞다.

따라서 출력된 결과값만 봐서는 어떤 슬라이스가 빈 슬라이스인지 선언만된 슬라이스인지 알 방도가 없다. 그렇다면 이 슬라이스는 그냥 빈 슬라이드일 뿐일까? 다음 코드를 보자.

var s []int
 if s == nil {
    fmt.Println("어라 nil이네!")
}

이 코드가 실행되면 결과는

어라 nil이네!

이다. 그러니까 길이가 0인 슬라이스가 nil인지 확인하려면 nil와 등호 연산자를 위해 비교해 봐야 한다.


그런데 왜 이렇게 설계했을까? 뭔가 엉성하다는 느낌을 지울 수가 없다.


'컴퓨터 > GoLang' 카테고리의 다른 글

new와 make  (0) 2017.11.12
select 문: 여러 채널에서 데이터 읽어 처리하기  (0) 2017.11.10
클로저(Closure)와 데코레이터(Decorator) 패턴  (0) 2017.08.14
아니 Go의 상태가…  (0) 2017.08.12
Go 채널  (0) 2017.08.09
Comments