Golang의 제로 값 Nil

Jay Singh 2023년6월20일
  1. Golang에서 다양한 유형의 nil 크기 확인
  2. Golang에서 nil 문자열 반환
Golang의 제로 값 Nil

’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