>백엔드 개발 >Golang >Go에서 ID에 대한 함수 포인터를 어떻게 안전하게 비교할 수 있나요?

Go에서 ID에 대한 함수 포인터를 어떻게 안전하게 비교할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-26 17:55:09699검색

How Can I Safely Compare Function Pointers for Identity in Go?

Go에서 함수 포인터 동일성

Go에서 == 또는 != 연산자를 사용하여 함수 포인터가 동일한지 비교하는 것은 허용되지 않습니다. 0이 아닙니다. 이 동작은 동일성과 동일성 비교가 혼합되는 것을 방지합니다.

함수 동일성은 함수 동일성과 다릅니다. 두 함수가 동일한지 확인하려면 동일성 비교를 사용해야 하고, 두 함수가 동일한지 확인하려면 동일성 비교를 사용해야 합니다.

Atom 예제에 표시된 것처럼 Reflect 패키지를 사용하여 함수 동일성을 비교합니다. , 정의되지 않은 동작으로 간주됩니다. 컴파일러는 구현을 병합하여 함수를 최적화할 수 있으므로 비교가 신뢰할 수 없게 됩니다.

신원을 확인하기 위해 함수 포인터를 올바르게 비교하려면 각 함수에 대해 고유한 변수를 만든 다음 해당 변수의 주소를 비교할 수 있습니다. 이 접근 방식을 사용하면 최적화에 관계없이 동일한 함수에 대한 함수 포인터를 비교할 수 있습니다.

다음은 함수 포인터의 동일성을 비교하는 방법의 예입니다.

package main

import "fmt"

func F1() {}
func F2() {}

var F1_ID = F1  // Create a *unique* variable for F1
var F2_ID = F2  // Create a *unique* variable for F2

func main() {
    f1 := &F1_ID  // Take the address of F1_ID
    f2 := &F2_ID  // Take the address of F2_ID

    // Compare pointers
    fmt.Println(f1 == f1)  // Prints true
    fmt.Println(f1 == f2)  // Prints false
}

위 내용은 Go에서 ID에 대한 함수 포인터를 어떻게 안전하게 비교할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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