>  기사  >  백엔드 개발  >  Go에서 함수를 맵 키로 사용할 수 없는 이유는 무엇입니까?

Go에서 함수를 맵 키로 사용할 수 없는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-31 18:27:29539검색

Why Can't Functions Be Used as Map Keys in Go?

지도의 기능 키

이 기사에서는 Go 프로그래밍 언어에서 기능을 지도 키로 사용할 때의 제한 사항을 살펴봅니다.

문제

다음과 같은 가상의 Go 코드를 생각해 보세요.

type Action func(int)
func test(a int) { }
func test2(a int) { }

func main() {
  x := map[Action]bool{}
  x[test] = true
  x[test2] = false
}

이 코드를 컴파일하려고 하면 "잘못된 맵 키"라는 오류가 발생합니다. type Action."

대답

Go 언어 사양에서는 함수, 맵, 슬라이스를 맵 키로 사용하는 것을 명시적으로 금지합니다. 구체적으로 사양에는 다음과 같이 명시되어 있습니다.

"비교 연산자 == 및 !=는 키 유형의 피연산자에 대해 완전히 정의되어야 합니다. 따라서 키 유형은 함수, 맵 또는 슬라이스가 아니어야 합니다."

이러한 제한은 키 유형에 대해 같음 비교 연산자(== 및 !=)가 잘 정의되어야 하기 때문에 적용됩니다. 함수, 맵 및 슬라이스는 동등 비교가 완전히 정의되지 않았기 때문에 적합한 키 유형이 아닙니다.

결론

함수를 맵 키로 사용하고 싶은 유혹이 있을 수 있지만 , 잘 정의된 동등 비교가 필요하기 때문에 Go에서는 허용되지 않습니다. 따라서 문자열, 정수, 구조체 등 다른 적합한 유형을 맵 키로 사용해야 합니다.

위 내용은 Go에서 함수를 맵 키로 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.