> 백엔드 개발 > Golang > golang의 기본이 아닌 구조에 인터페이스를 추가하는 방법은 무엇입니까?

golang의 기본이 아닌 구조에 인터페이스를 추가하는 방법은 무엇입니까?

王林
풀어 주다: 2024-02-06 08:18:11
앞으로
1114명이 탐색했습니다.

golang의 기본이 아닌 구조에 인터페이스를 추가하는 방법은 무엇입니까?

질문 내용

저는 https://github.com/lib/pq를 사용하여 postgres에서 데이터를 가져옵니다. 데이터를 추출하기 위해 protobuf 타임스탬프 필드 https://pkg.go.dev/google.golang.org/protobuf/types/known/timestamppb#timestamp를 포함하는 타사 구조를 사용합니다. 그래서 따라서 문제는 time.time에서 timestamppb.timestamp

까지 스캔할 작업을 얻는 것입니다. 으아아아

sql.scanner 인터페이스를 구현한 구조체를 스캔해 봅니다. 그것은 간단합니다. 방금 다음과 같이 스캔 기능을 구현했습니다.

으아아아

하지만 timestampppb.timestamp는 네이티브 유형이 아니기 때문에 작동하지 않습니다. 그런 다음 로컬 유형을 정의하고 동일한 작업을 수행해 보았습니다

으아아아

하지만 이 트릭은 작동하지 않았습니다. 또한 "'scan'이 값으로 잠금을 통과합니다. 'timestamppb' 유형에 'protoimpl.messagestate'에 'sync.mutex', 즉 'sync.locker'가 포함되어 있습니다."라는 경고가 표시됩니다. timestampppb에 대한 포인터를 지정하면 작동하지 않습니다

으아아아

그래서 sql.scanner의 timestampppb.timestamp 인스턴스를 만드는 방법을 알고 싶습니다. 가능합니까?

업데이트 1 내가 시도한 작은 예

으아아아

teststruct와 함께 사례를 사용할 수 있는지 알고 싶습니다.


정답


pq 库不支持 *timestamppb.timestamp은 타임스탬프 유형입니다. 지원되는 날짜 유형에 대한 설명서를 참조하세요.

스캔할 때 다양한 유형이 필요합니다.

저는 보통 함수에서 도우미 유형을 사용하여 이 작업을 수행합니다. 예:

으아아아

위 내용은 golang의 기본이 아닌 구조에 인터페이스를 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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