質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

解決済

GoでのORMを使用しないAPI開発。SQLの結果をstructにmapすることについて。

Zett-8
berliner

総合スコア8

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1回答

0リアクション

1クリップ

1708閲覧

投稿2022/07/28 14:50

前提

GoでAPIを構築する際、ORMを使用せず生のSQLを書くとそれをStructにマッピングする必要があります。
sqlx (https://github.com/launchbadge/sqlx) のようなライブラリを使うことで、マッピングを簡易的に行うことも可能ですが、
One-to-ManyやMany-to-Manyとなると対応しておらず、クエリを複数回叩くか、取得したデータをループで回して手動でStructに入れていかなければなりません。

はじめはそんなわけがないと思い、いろいろ解決策を探したのですが例えばここ(https://stackoverflow.com/questions/54601529/efficiently-mapping-one-to-many-many-to-many-database-to-struct-in-golang)
でも言及されてるように、泥臭い解決方しかないようです。

聞きたいこと

そこでお聞きしたいのは、どうやって解決するか?ということではなく、
本当にこんなことをみんなやってるのか?という素朴な疑問です。

ORMの話になったとき、巷ではよく「ORMを使うのはよくない」とか「本来ORMは必要ない」というような情報を目にします。
中でもGoは言語思想的にもしくは言語の特徴的にORMを使わない方が良いという風潮が強いように感じます。

でもORMを使わないことがこんなに面倒ならあまりに割に合ってない気がしてしまいます。

リンク先の例は非常にシンプルなものですが、実際の現場ではもっと複数のテーブルを組み合わせる必要があったり、もっと深くネストすることもありますよね、そう考えるととてもORM無しでやれるとは思えません。

世の中のバックエンドエンジニア方々、ORMなんて無くていいんだという強者な人たちは本当にこんなことをしているのでしょうか?
それとも私が知らないだけでもっと優れた解決法があるのでしょうか?

個人ではフルスタックで開発していますが、ORMを使用した経験(Node.js + prisma等)しかありません。
会社で働く際はフロントエンド中心でバックエンドを触る機会はあまりなく、あったとしてもORMを使用したプロジェクトにしか関わったことがないのでこちらで質問させていただきました。

先輩方のお話を聞かせていただけると幸いです。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。