投稿日:

    カテゴリー 日常 / プライベート

    GO言語(Revel) 未経験が開発してみたって は・な・し

    こんちは、制作部の田島です。
    案件でGo言語で開発したので、感じたことなどを話していきます!
    ちょっと長くなっちゃうかなぁ。。

    で、今回はフレームワークは、Revelを利用しました。
    今回ぶちあたった壁は、3つです。
    1.DB接続
    2.関数の返り値の厳密さ
    3.view表示処理

    自分がぶち当たった壁にGo言語とは何か触れておきましょう!

     

    ・Go言語とは
    Goはプログラミング言語の1つである。2009年、GoogleでRobert Griesemer、ロブ・パイク、ケン・トンプソンによって設計された。Goは、静的型付け、C言語の伝統に則ったコンパイル言語、メモリ安全性、ガベージコレクション、構造的型付け、CSPスタイルの並行性などの特徴を持つ
    ※引用 https://ja.wikipedia.org/wiki/

    。。。。。。。。。。。。

    何をおっしゃりたいのか分かりますよ。。。
    引用じゃなくてちゃんと説明しろと。。。
    でも細かいところを説明しても仕方がないので、根幹的なところを説明します!

     

    ・コンパイル言語とは何か
    コンパイル言語を対をなす言葉に、インタプリンタ(インタープリンタ)言語というものがあります。
    また難しい言葉を並べやがって説明する気があるのかよーっと思ったあなた!
    少し待って!分かりやすく説明するので!

    弊社で開発となったら主に、PHP(Laravel)が選ばれるのですが、
    PHPがまさにインタプリンタ型言語です!

    この二つの違いは、実行速度です!(コンパイル言語が基本的に速いです)
    なぜこんな違いがおきるのがというと、
    コンパイル言語は、プログラムを実行する以前に最適化して機械が読みとりやすくしているためで、
    インタプリンタ言語は、うーんこの処理はこれだからぁとあれはこれでぇと
    プログラムを実行するときに読み取ってしまっているためです。

    十分わかりやすく書いたと思うんですが、ピッチャー(野球)で例えると
    アップしてから、マウンドで投げるか(コンパイル言語)
    いきなりマウンドでピッチングするか(インタプリンタ言語)くらい投球スピード(プログラム実行速度)が違います。
    いきなり投げた方がすごいという方は稀ですよね。。。?

     

    てなわけで、めっちゃ前置きが長くなっちゃいましたが自分がぶちあたった壁について!

    1.DB接続
    今回は、DB処理にGORMを使用しました!
    いやぁ、DBに繋がらない繋がらない笑
    ローカル環境は、dockerで他の方が構築されていたのですが、
    dsnの接続情報が、dockerだと微妙に違ったみたいでそこがどハマりポイントでした。。
    最終的にはつながりましたが、プログラムって簡単なことでもハマると、とことん訳が分からなくなるので怖いですね。。。

     

    2.関数の返り値の厳密さ
    関数の返り値設定するのは、簡単やろ!っと意気揚々と関数作成。
    えっ、簡単じゃん!っと思っていたのですが返却値を返すときにエラーが発生。。。
    詳しいエラー内容は覚えていないのですが、関数で定義している型と返却値が合いませんみたいなエラーだったと思います!
    こっ細い。。。これがコンパイル言語か。。。感覚的には、コンパイル言語がネチネチ姑で、
    インタプリンタ言語が、なんでも買ってくれるおじいちゃん(PHPで関数の返却値はあまりつっこまれません)
    その時は、DBから取得したデータが合わなかったので、これからGo言語で開発する人は、DBのデータ返却値に気をつけてください。
    ここでは、説明しませんが、ポインタ型が絡んできていたので厄介でした!

     

    3.view表示処理
    なんやかんや処理してきたデータを最終的に画面に表示するのですが、
    少しデータをいじりたかったので四則演算(足すとか割るの計算処理)を書いてみる!
    そして、コンパイル!!!!。。。。。。エラー?なんで?
    自分達が選んだtemplaete(Go templaeteだったかな?)ではそのまま四則演算ができないことが判明。
    うそ。。。PHP(Laravel)ではできるのに。。。。
    もう頭の中は某孫◯空のようにプッツンですよ(スーパー◯イヤ人化)
    結構やり方を探して、やっと見つけました!(Revelは参考記事少ないです。。。)
    Controller内で定義して、templaete側に利用できるにしないといけないみたいです!
    自分としては、この実装方法は非常に気持ち悪いです。
    仕様なので仕方ないですが。

     

    予定通りめちゃくちゃ長くなりましたね笑笑
    ここまですんなり読めれば、あなたも立派なプログラマー!
    そういえばITに関係するブログは初めてだったから新鮮でした!(途中色々説明しなくてすみません)
    また何かあれば記事にしてみたいと思います!
    では!

    ■ドキュメント
    ・Go
    https://xn--go-hh0g6u.com/doc/

    ・Revel
    https://revel.github.io/

    ・GORM
    https://gorm.io/ja_JP/docs/index.html