Golang의 제로 값 Nil
Jay Singh
2023년6월20일
’nil’은 잘 알려져 있고 중요한 미리 정의된 식별자인 Go 프로그래밍 언어의 0 값입니다. 여러 가지 다른 유형의 0 값을 문자 그대로 표현한 것입니다.
다른 인기 있는 언어로 작업한 많은 초보 Go 프로그래머는 nil
을 다른 언어의 null
(또는 NULL
)과 동일하게 생각할 수 있습니다. 이것은 부분적으로 맞지만 Go의 nil
과 다른 언어의 null
(또는 NULL
) 사이에는 몇 가지 차이점이 있습니다.
Golang에서 nil
이 무엇을 의미하는지 알아보기 위해 몇 가지 사례를 살펴보겠습니다.
Golang에서 다양한 유형의 nil
크기 확인
모든 값 유형의 메모리 레이아웃은 항상 동일합니다. 유형의 nil
값은 예외가 아닙니다(제로 값을 nil
로 가정).
nil
값의 크기는 항상 nil
값과 유형이 같은 nil이 아닌
값의 크기와 동일합니다. 그러나 다양한 유형의 nil
값은 크기가 다를 수 있습니다.
암호:
package main
import (
"fmt"
"unsafe"
)
func main() {
var p *struct{} = nil
fmt.Println(unsafe.Sizeof(p))
var s []int = nil
fmt.Println(unsafe.Sizeof(s))
var m map[int]bool = nil
fmt.Println(unsafe.Sizeof(m))
var c chan string = nil
fmt.Println(unsafe.Sizeof(c))
var f func() = nil
fmt.Println(unsafe.Sizeof(f))
var i interface{} = nil
fmt.Println(unsafe.Sizeof(i))
}
출력:
8
24
8
8
8
16
Golang에서 nil
문자열 반환
문자열 값을 참조하는 포인터 변수 유형은 문자열
입니다. 포인터의 0 값은 nil
입니다.
암호:
package main
import (
"fmt"
)
func main() {
var data *string = nil
if data == nil {
fmt.Println(data)
}
}
출력:
<nil>
다음 예제에서는 Golang에서 nil == nil
인지 확인합니다.
암호:
package main
import (
"fmt"
)
func main() {
var i *int = nil
var j *int = nil
if i == j {
fmt.Println("equal")
} else {
fmt.Println("no")
}
}
출력:
equal