GoかC#か

ここ半年程、超スローペースでアプリを作っている。フロントエンドがAngularでバックエンドがGoという構成。Angularは仕事でも使ってるからという理由で選び、Goはサクサク動くし評判良かったので選んでみた。

 

しかし、このGo、REST作るまでは、おー楽ちんなんて思ってたんだけど、MongoDBライブラリー使い始めた辺りからペースダウン。何で躓いたのかメモしておく。

 

やりたかった事

仮に、Teamというオブジェクトに、Membersというオブジェクト配列が入ってたとしよう。別のマスターオブジェクトとしてMembersがあり、補欠メンバーも含まれており、Team内にあるのは主要メンバーのみ。

とあるMemberの名前を変更した、彼は主要メンバーだったのでTeam→Membersも更新する必要ある。というだけの話なので、Team.$.children みたいなのでアクセスできるはずなのだ。

 

これをGoの方法で探し、3種類くらい見つけた。一つは、古いMongoDBライブラリー版で問題外、他のはどのライブラリーかは判らんが用法に似てるのでいけそうだったが、エラーでMember名を更新できず。一つは、Teamを丸ごと書き換えろとか言う方法で、それもどうなんだ?と。

これを解決する為に、スローペースなのもあるが、数か月が経過(笑)なんでこんなに情報が古い、もしくは無いのだろうかと。

 

他の言語ではどうやってるのか?

という素朴な疑問が出てきた。Nodeでバックエンド作る気も無く、Javaもリソース食いで好きじゃない、さてどうしようか?と思ってたら、数年前にC#がLinuxもサポートした事を知り、おーこれはと思った次第。転職活動も一時期やってて、C#のバックエンドというのも良く見かけてたので、Goよりも使える言語ではある。Windowsサーバー上でしか動かないと思ってたので、興味無しだったんだが、いい機会なので、10年ぶり位にC#を試してみる事に。

 

C#的なMongoでの、入れ子の配列オブジェクト

ひとまず、上記問題のC#での解決方法を調べてみると、Stackover Flowにあった のでなんとかなるだろう。Goみたいに新旧の情報が混ざってないのはありがたい。

開発環境は?

Visual Studio無くても良いようで、DotnetライブラーをLinux上に入れればビルドと起動できるようだ。Visual Studio Codeでもデバッグも全然問題ないようなので、ひとまず始められる。MongoDBのドライバーも当然ある。APIリファレンスは明らかにGoより分かりやすい。

C# MongoDB Library API Reference

Go MongoDB Library API Reference

マイクロソフトもちゃんとMongoDBのWeb APIとしての組み込み方のページを作っており楽ちん。

ひとまず、Web APIのエンドポイント用意して、MongoDB突っ込む所までを半日で完了。なかなかお手軽。 マイクロソフトのドキュメントが豊富なのと、ネット上の情報もGoよりはるかに豊富で楽。

 

入れ子配列オブジェクトの更新

早速、MongoDBへアクセスするエンドポイントが出来たので、Stackover Flowに習い、更新する部分を追加したら、サクッと上書きされて実験終了。なんだろ、この楽ちんさは?後で、もう一回Goでやってみるとしよう。

 

そういえば、C#でMongoDBへ読み出しアクセス中、何か所かエラーが発生し、一部の型を変更する必要があった。なぜかGoではそのエラーをキャッチできなかった。それが原因なのかは不明だが、明らかにC#の方が作業効率高い。Goはとっつき難いというのは知っていたが、情報が錯綜しすぎてる気がする。REST API作ると言って調べても、ライブラリーの有り無し、ライブラリー使ったとしても、ライブラリーによって用途が全然違うので、解説ページや問題対象方法見つけても、どのライブラリーをインポートしてるか確認しないといけない。もしくは、自分が使ってるライブラリーでの対応方法が見つけられない、といった事が常である。Linux系では良くある話だが(笑)

そんな感じなので、Goで作って来たものの、転職にも生かせる、情報が多い、楽ちん、サクサク動くという条件を前にして、C#へ乗り換え無い、という選択肢は無いだろうな。という事で、今間で作ったものを変換する作業になる。が、こんな感じだと、そんなに時間かからないと思うな。

 

<追記>

再度Goでやった結果、入れ子配列オブジェクトの更新ができた。うまく動かなかったのは、Filterに使うIDもObjectIDに変換してなかったからのようだ。しかし、Stackover Flowでは変換などしてない。あー質問者のデータみたら、IDがStringじゃないか・・・。

C#だとエラー内容がObjectIdとStringで方が合ってないみたいなエラーでDB直ぐに修正できたんだが、Goでは、ドキュメントが見つからなかったというエラーで、何が悪いのか見当もつかず。

Goで動いたので、どうしたものかと・・・。このままGoで作るか、C#で作るか。Dropbox, Terraform, Kubernetes, and DockerなどはGoで作られてるらしし、AWS Lambdaもいつの間にかGo対応になっている。Python代わりに、PHPシェル代わりに使ってるという人も居るようで、習得しとくとやっぱ便利そうな気もする。C#はWindows上で最適という話もあり、Linuxサーバー上で動かす事を想定してたので、どうなんだろうか?ユーザー数からして問題ないと思うんだが。やっぱり乗換えは保留にしてGoで続けてみよう。

ブックマーク パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です