> 백엔드 개발 > Golang > Go에서 일대다 및 다대다 데이터베이스 관계를 구조체에 효율적으로 매핑하는 방법은 무엇입니까?

Go에서 일대다 및 다대다 데이터베이스 관계를 구조체에 효율적으로 매핑하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-11 08:55:02
원래의
472명이 탐색했습니다.

 How to Efficiently Map One-to-Many and Many-to-Many Database Relationships to Structs in Go?

Go

에서 구조체에 일대다 및 다대다 데이터베이스 관계를 효율적으로 매핑

백그라운드< ;/h2>

데이터베이스로 작업할 때 일대다 및 다대다 관계를 접하는 것이 일반적입니다. 이러한 시나리오에서는 이러한 관계를 Go 구조체에 효율적이고 확장 가능하게 매핑하는 것이 중요합니다.

PostgreSQL 배열 수집기와 GROUP BY

를 사용하는 권장 접근 방식

효과적인 접근 방식 중 하나는 다음과 같습니다. PostgreSQL의 배열 수집기 및 GROUP BY 기능을 활용합니다. 여기에는 배열 집계를 사용하여 항목과 관련 데이터를 함께 그룹화하는 보기를 만드는 작업이 포함됩니다. 그러면 배열 내용이 Go 구조체로 정렬 해제되어 결과 뷰를 쿼리할 수 있습니다.

<br>sql := `<br>CREATE VIEW item_tags AS<br>SELECT<br> id ,<br> ARRAY_AGG(ROW_TO_JSON(taglist.*)) AS 태그<br>FROM<br> (</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">SELECT
  tag.name,
  tag.id
FROM
  tag
WHERE
  item_id = item.id
로그인 후 복사

) AS 태그 목록
GROUP BY
item.id
`
db.MustExec(sql)

Go 코드는 다음과 같습니다.

<br>type Item struct {<br> ID int<br> 태그 []Tag<br>}</p>
<p>행, err := db.Queryx("SELECT row_to_json(row) FROM (SELECT * FROM item_tags) row")<br>행. Next() {<br> var item Item<br> var jsonString string<br> if err :=rows.Scan(&jsonString); err != nil {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return err
로그인 후 복사
로그인 후 복사

}
if err := json.Unmarshal([]byte(jsonString), &item); err != nil {

return err
로그인 후 복사
로그인 후 복사

}
items = 추가(items, item)
}

장점< /h2>

이 접근 방식은 PostgreSQL의 유연성과 Go의 배열 집계 및 행 수준 마샬링의 효율성을 결합합니다. 복잡한 관계에서도 원활하게 확장됩니다.

대안

권장되는 접근 방식은 효율적이고 다양하지만 질문에 언급된 대체 솔루션에는 고유한 장점과 장점이 있습니다. 약점:

궁극적으로 최선의 접근 방식은 애플리케이션의 특정 요구 사항과 사용 가능한 기술에 따라 다릅니다.

위 내용은 Go에서 일대다 및 다대다 데이터베이스 관계를 구조체에 효율적으로 매핑하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
이전 기사:Go 개발을 위해 Delve 디버거를 Visual Studio Code에 통합하는 방법은 무엇입니까? 다음 기사:Go에서 "do while" 루프를 구현하는 방법은 무엇입니까?
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
관련 주제
더>
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿