> 백엔드 개발 > Golang > 단일 조건으로 여러 Go 맵에 걸쳐 키 존재를 효율적으로 확인하려면 어떻게 해야 합니까?

단일 조건으로 여러 Go 맵에 걸쳐 키 존재를 효율적으로 확인하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2025-01-06 00:22:39
원래의
974명이 탐색했습니다.

How Can I Efficiently Check for Key Existence Across Multiple Go Maps in a Single Condition?

여러 맵에서 키 존재 확인

여러 맵으로 작업할 때 모든 맵에 특정 키가 있는지 확인해야 하는 경우가 많습니다. 그들을. 다음 접근 방식이 일반적이지만

if v1, ok1 := map1["aaa"]; ok1 {
    ...
}
if v2, ok2 := map2["aaa"]; ok2 {
    ...
}
로그인 후 복사

여러 if 문이 포함됩니다. 하나의 조건에서 이 검사를 수행하는 더 간결한 방법이 있습니까?

Condensing Syntax 시도

한 가지 가능한 해결책은 두 맵에서 키 존재를 평가한 다음 교차점을 확인하세요.

v1, ok1 := map1["aaa"]
v2, ok2 := map2["aaa"]
if ok1 && ok2 {
    ...
}
로그인 후 복사

그러나 이 접근 방식에서는 두 개의 별도 할당 및 체크인이 필요합니다. steps.

단일 조건 키 검사의 한계

나중에 Go 언어는 단일 if 조건에서 여러 키 존재를 검사하는 것을 허용하지 않습니다. Go 사양에 따르면 지도의 인덱스 표현식은 키의 존재 여부를 나타내는 추가 부울 값을 생성합니다. 이 특수 구문은 할당이나 초기화에만 사용할 수 있습니다.

따라서 특수 v, ok := m[k] 형식만으로는 결합 키 존재 확인을 수행할 수 없습니다.

키 존재 확인의 대안

맵의 값 유형이 인터페이스 유형이고 보장 가능한 경우 nil 값을 가지지 않기 위한 대체 접근 방식은 튜플 할당을 사용하여 키 존재를 확인하는 것입니다.

if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil {
    ...
}
로그인 후 복사

더 복잡한 경우에는 도우미 함수를 만들어 키 존재 확인 논리를 캡슐화할 수 있습니다.

func idx(m1, m2 map[string]interface{}, k string) (
    v1, v2 interface{}, ok1, ok2 bool) {

    v1, ok1 = m1[k]
    v2, ok2 = m2[k]
    return
}

// Usage example:
if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 {
    ...
}
로그인 후 복사

위 내용은 단일 조건으로 여러 Go 맵에 걸쳐 키 존재를 효율적으로 확인하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿