>백엔드 개발 >Golang >dynamodb 프로젝트를 언마샬링하면 동일한 프로젝트가 반환됩니다.

dynamodb 프로젝트를 언마샬링하면 동일한 프로젝트가 반환됩니다.

PHPz
PHPz앞으로
2024-02-08 23:00:111054검색

解组 dynamodb 项目返回相同的项目

PHP 편집자 Zimo가 오늘 DynamoDB 항목을 그룹 해제하고 동일한 항목을 반환하는 문제를 해결하는 방법을 소개하겠습니다. DynamoDB는 고성능 서버리스 키-값 데이터베이스이지만 쿼리 시 동일한 항목을 반환하는 경우가 있어 개발자에게 까다로운 문제가 될 수 있습니다. 걱정하지 마십시오. 쿼리 결과가 고유하고 정확하도록 보장하는 솔루션을 제공해 드리겠습니다. 이 글에서는 문제의 원인을 자세히 설명하고 이를 해결하는 간단하고 효과적인 방법을 제시하겠습니다. 한 번 보자!

질문 내용

스캔 함수를 사용하여 dynamodb에서 반환한 type.attributevalues 맵을 반복하는 golang의 범위 루프가 있습니다.

golang aws-sdk-v2 패키지에서 제공하는 내장 함수attributevalue.unmarshalmap()를 사용하여 이 맵을 반복했는데, 그 결과 슬라이스와 길이가 같은 항목을 다시 얻었습니다.

코드:

으아악

결과의 슬라이스에 사용자를 추가해 보았습니다

으아악

내가 attributevalue.unmarshallistofmaps()를 사용하여 찾은 해결책은 단순히 dynamodb의 항목 조각으로 기능을 제공하는 것입니다.

내 질문은 실제로 위의 두 가지 솔루션을 사용하는 것이 예상대로 작동하지 않는 이유를 이해하는 것입니다. dynamodb 항목을 반복하여 비마샬 기능에 개별적으로 전달하지 않습니까? 계속 같은 일을 하는 것 같습니다.

해결 방법

dynamo db unmarshalling에서 json unmarshaling으로 문제를 약간 변경하면 go 놀이터에서 할 수 있습니다. 예제 코드에서는 두 가지 요소가 함께 작용하여 중복된 슬라이스 값을 발생시키는 것을 볼 수 있습니다.

  1. 역마샬링 대상은 루프 외부(51행)에서 정의되므로 u1out가 역마샬링되면 결과는 각 루프 반복(54행)에서 동일한 위치에 기록됩니다.

  2. user1 类型的字段为 *string,因此当将循环变量值复制到切片时(第 55 行),useremail이 가리키는 문자열은 복사되지 않습니다. 해당 포인터 값만 복사됩니다.

이 두 가지를 합치면 각 반복은 마샬링되지 않은 useremail 값을 동일한 메모리 위치에 기록합니다. 이는

의 요소를 인쇄하는 출력의 처음 두 줄에서 입증됩니다. useremail 值写入同一内​​存位置。输出的前两行证明了这一点,它们打印 u1out

출력의 나머지 줄은 대상 변수가 루프 내부로 이동하는 경우(

)라는 세 가지 다른 경우에 대한 결과를 보여줍니다. 각각의 경우 그룹화되지 않은 값의 새 위치가 예상대로 생성되고 중복 항목은 인쇄되지 않습니다. u1inu2in)或字段更改为 stringu2out 으아악

위 내용은 dynamodb 프로젝트를 언마샬링하면 동일한 프로젝트가 반환됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제