Golang nil 비교 사용할 때 주의점

Go에서는 null을 nil로 사용합니다.

다른 언어와 다른 점으로는 Go에서는 nil은 데이터 타입 정보를 기억하고 있다는 것입니다.

nil 타입 정보 예제

package main

import "fmt"

func main() {
	var x *int32 = nil
	var y *int64 = nil

	compare(x, y)
}

func compare(x, y interface{}) {
	fmt.Println(x == y)
}

 

결과

false

 

변수 x와 y를 비교하는 예제를 실행하면 false를 출력합니다.

x와 y에는 nil을 대입했습니다.

하지만 데이터 타입이 다르기 때문에 결과는 false를 출력합니다.

이번에는 변수에 nil을 대입하고 직접 nil과 비교해보겠습니다.

 

nil 비교 예제

package main

import "fmt"

func main() {
	var x *int32 = nil

	compare(x)
	return
}

func compare(x interface{}) {
	fmt.Println(x == nil)
}

 

결과

false

 

compare 함수에서 x는 interface{}로 취급되고 있기 때문인지 nil과 일치하지 않는 타입으로 판단돼 false를 출력합니다.

그럼 올바르게 비교를 하기 위해서는 nil을 비교하려는 대상과 타입을 동일하게 해줘야 합니다.

nil은 형변환을 할 수 있습니다.

 

nil 형변환 예제

package main

import "fmt"

func main() {
	var x *int32 = nil

	compare(x)
	return
}

func compare(x interface{}) {
	fmt.Println(x == (*int32)(nil))
}

 

결과

true

 

nil은 변수의 데이터 타입도 저장하고 있기 때문에 비교를 하기 위해서는 비교하고 싶은 타입으로 형변환을 해서 사용해야 합니다.

댓글