programing

복합 리터럴은 키 없는 필드를 사용합니다.

lastcode 2023. 2. 26. 09:46
반응형

복합 리터럴은 키 없는 필드를 사용합니다.

나는 골랑의 새로운 공식 몽고드라이버와 함께 일하고 있다.mongo db에 데이터를 삽입하고 요소 값에 따라 정렬하기 위해 하나의 복잡한 쿼리를 만들었습니다.bson 타입을 작성한 필터를 사용하고 있습니다:- 필터를 사용하고 있습니다.

filter := bson.D{{"autorefid", "100"}}

그러나 다음과 같은 경고가 표시됩니다.

원시적인복합 리터럴은 키 없는 필드를 사용합니다.

경고로 인해 코드가 엉망이 되고 있습니다.

체크 플래그를 false로 설정하면 경고를 중지할 수 있습니다.

$ go doc cmd/vet

기본적으로는 모든 검사가 수행됩니다.명시적으로 true로 설정된 플래그가 있는 경우 해당 테스트만 실행됩니다.반대로 플래그가 false로 명시적으로 설정되어 있는 경우는, 이러한 테스트만이 디세블이 됩니다.따라서 -printf=true는 printf 체크를 실행하고 -printf=false는 printf 체크를 제외한 모든 체크를 실행합니다.

Unkeyed composite literals

Flag: -composites

Composite struct literals that do not use the field-keyed syntax.

그러나 이 경고는 에서 값을 설정할 때 키 이름을 제공하지 않기 때문입니다.primitive.E구조화.

키 설정primitive.Estructure를 지정하면 경고 메시지가 삭제됩니다.예를들면

filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}

패키지 프리미티브에는 BSON 유형의 Go 프리미티브와 유사한 유형이 포함되어 있습니다. Go 프리미티브는 직접 Go 프리미티브 표현을 가질 수 없습니다.

type E struct {
    Key   string
    Value interface{}
}

E는 D의 BSON 요소를 나타냅니다.보통 D자 안에서 사용됩니다.

자세한 내용은 원본을 참조하십시오.E.

간단하게 변경할 수 있습니다.

filter := bson.D{{"autorefid", "100"}}

대상:

filter := bson.D{{Key: "autorefid", Value: "100"}}

//Primitive는 생략합니다.Chris W가 말한 바와 같이 E

다른 누구도 이를 지적하지 않았기 때문에 이 경고는 서드파티 API의 변경으로 인해 코드가 자동으로 손상되는 것을 방지하기 위한 것입니다.

이것을 무시하다vetwarning은 런타임 버그를 추적하기 어려운 매우 나쁜 결과를 초래할 가능성이 있기 때문에 항상 서드파티의 키를 명시적으로 지정하는 것이 좋습니다.

사용하고 있는 라이브러리의 유지보수가, 그 라이브러리의 요소의 순서를 변경하는 것을 결정한 경우입니다.struct이유야 어떻든 간에예를 들어 스위칭Key와 함께Value, OP 케이스의 경우.코드는 정상적으로 컴파일 되어 있는 것처럼 보이지만, 열쇠가 되고 싶은 것은 값으로 전달되고, 그 반대도 되어, 예기치 않은 방법으로 문제가 발생하기 시작합니다.

변경할 수 있습니다.

filter := bson.D{{"autorefid", "100"}}

대상:

filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}

실제로 BSON 문서의 순서가 매겨진 표현이 필요하지 않은 경우 단순히 변경함으로써 BSON 문서를 순서가 매겨지지 않은 표현으로 변경할 수 있습니다.

filter := bson.D{{"autorefid", "100"}}

로.

filter := bson.M{"autorefid": "100"}

자세한 내용은 다음 stackoverflow 답변을 참조하십시오.bson.D »bson.MMongoDB 서버는 사용 순서에 관계없이 일치하는 인덱스를 찾을 수 있을 정도로 스마트합니다.

vscode를 사용하는 경우 설정에서 다음을 비활성화해 보십시오.

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/54548441/composite-literal-uses-unkeyed-fields

반응형