Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- doom-emacs
- 바로코
- emacs
- Reflection
- driverless
- 다이어트
- mistel md600 alpha
- 이맥스
- Griffiths
- 양자역학
- 엘리스배열
- md600alpha
- Go 언어
- 고양이책
- 리플렉션
- 스플릿키보드
- Go
- 키보드
- 건프라
- eslip
- nil
- 벤치마크
- 음각몰드
- mf642cdw
- 터미널
- mopria
- 패널라인
- 체리적축저소음
- Golang
- go언어
Archives
- Today
- Total
Meandering Trajectory
Go 언어: 빈 슬라이스와 nil 본문
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