Go言語の本がKindleで安かったので買ってみた
Kindleの日替わりセールでたまたま500円だったので買いました。
友人もお勧めしてたのでせっかくなので読み進めてみます。
業務では5年ほどJava、VB.NETを扱ってきましたが、それぞれの違いなどについてざっくり書こうかなって思います。(基本Javaです)
あとこれを書き終わるくらいには何か動くものがあればうれしいなと思ってます。
↓これを読みました。
開発環境を作る
IDE
新しい言語ならVSCode一択でしょ、と思ってVSCodeをダウンロードします。
プラグインは、軽くググって必須なものに加えてざっくり便利そうなものをいくつか選んで入れておきます。
まだ歴が浅いのでこんなの便利だよ~みたいなのあれば教えてほしいです。
バージョン管理
SourceTreeが見やすいのでこれを入れます。
それとGitHubアカウントを作っておきます。
SSH連携みたいなあれをして完了です。
業務ではSVNしか使ったことなくてしかも男気のtrunk一本運用なのでGitの設定だけでなかなか進まず…。
友達に教えてもらったサル先生のやつを読みつつ進めます。
環境が整ったら動かしつつコードを読んでいきます。
第1章
前半はwebアプリについての基礎知識が解説してあります。HTTPという通信プロトコルの基礎から解説してあるのは助かりますね。
業務で触ってたとはいえ保守がメインだったので、すでに整っていて触ったことのないレイヤーの話が詳しく書いてあるのはありがたいです。
後半でHello,Worldのサンプルが載っていました。
Goで一番驚いたのはwebサーバーの機能も含めてコンパイルするのでスタンドアロンで動くことです。
Javaでいえば、サーバー立ててApache入れて設定ファイル作ってビルドして配置して…みたいなことをやらなくてもダブルクリックで動くというのが超絶感動です。
チュートリアルやろう→動くまでのスピードが速すぎてすごいです。
第2章
チャットアプリを作る章です。
Postgresqlをインストールして動かします。今までローカルのDBなんて作ったことなかったのでこんな簡単に作れるのか!と感動しました。(これはGo関係なく不勉強なだけですが)
Go言語はオブジェクト指向言語ではないのでクラスがないのですが、ポインタを使ってポインタを渡す関数を作ることでクラスの内部メソッドにアクセスするような感じで使えるのが面白いです。
ポインタなんてC言語で初めて見たときは何に使うのかわからんややこしいだけのものだと思ってましたが、こういう風に使うのであればメリットは感じられます。
また、構造体をつかうところもC言語と雰囲気が似ているので読むのは困難ではなかったです。
一応情報系の学科出身なのでC言語を授業で受けててよかった~と思ったポイントです。
第3章以降
全10章あるのにいきなり3章以降まとめて終わりにしてしまいます。
正直1週間程度で全部読んだのでまだまだ威力がわかっていない部分があるのでこれからサンプルコードを改造していくことで理解を深めていこうと思います。
以下、Goの便利だと思ったポイントを挙げていきます。
戻り値が複数OK
これは地味に便利なところですね。
例外処理をなくすために複数戻り値を可能にしたのだと思ってますが、これが生きてくる場面は多そうです。
業務アプリを作るとき、業務の仕様上ある条件において複数のパラメータが決定することが多いですが、
Javaでそういう場面になったとき同じ条件で分岐するメソッドを複数用意するか、内部フィールドに値を入れるかで対応していたのでテストを書くときに何となく違和感があったのでそれが解消できるのは便利そうです。
テストが標準ライブラリで用意されている
これは最近の言語なら普通はあるんでしょうか?新しめの言語は全然知らないのでわからないですが、標準で用意されていればテストを書くことが当たり前だということです。
業務で扱っていたシステムは全くテストがなくて困ったので標準で用意されているのはうれしいことです。
並行処理の実装が簡単
まだ実装していないのですが、並行処理が便利らしいです。
型推論がある
型を省略できるのは実装においてはサクサク進められるので便利ですね。
コードリーディング時にはちょっと読みにくいこともありそうです。
環境変数から値を取得できる
これは本には載ってなかったのですが、GitHubのプライベートリポジトリにコミットするとして、データベースの接続情報を直書きするわけにはいかないのでどこに記載するべきか調べていたところ、環境変数から取得できるのがわかりました。
クラウド上で動作することを意識した機能なんでしょうか?
別のファイルで管理するなどしなくても大丈夫なのは便利そうですね。
躓いたところ
デプロイには何が必要なのかがわからなかった。
何をコミットして何をコミットすべきじゃないのかという話が本にはなかったのでうっかりDB情報書いたままにしてしまうなどありそうだなと思いました。
また、modファイルが必要じゃないと思って勝手に省いていたのでしばらくデプロイできなかったのもあってその辺の情報が書いてあると助かるなあと思います。
herokuではbuildpackが必要
GitHub連携でそれがそのままデプロイされず調べたらbuildpackの設定が必要でした。
Webの設定画面から簡単に設定できますが、ちょっと時間かかったので書いておきます。
レガシーシステムとモダン開発を比べてみて
Go言語はJavaに比べると、Javaの面倒な部分がうまいこと省略されている印象を受けます。
特に感動したのはスタンドアロンになる部分ですね。
また、いままでモダン開発といわれる言語やフレームワーク(Rails,Spring,Djangoなど)のチュートリアルだけやってはクラウドで公開する段階で挫折していましたが、今回はデプロイできました。
ストレスなく開発が進められるというのは大きいので、JavaからGoに乗り換えるメリットは学習コストを考えても上回るのかなと思います。
成果物
GitHubで公開しています。
それをherokuで動かしてみました。
セキュリティとか大丈夫なんですかねーこれ。
なぜかわからないですが、DB接続できてないです。一応公開してます。
→2022/06/27追記 つながってるけどタイムアウトしている?みたいな動作してます。ログインできず。
→2022/06/28追記 普通につながってるのにログインパスワード間違って動作してないって思っててほんとうっかり。ただ、こういうのを気づけるようなエラーメッセージ実装とかが必要だなと思いました。
これから勉強したいこと
今回はサーバーサイド言語をやったので次はフロントの勉強をしたいです。
JavaScriptは全然真面目にやったこともないしそもそもコンパイルしたときにエラーが出なくて本当に嫌いなのでモダンなJavaScriptではどう変わってくるのかが気になっています。
ていうかUdemyでセールだったのでReactの教材を買ってしまいました。やるしかない。
以上です。ありがとうございました。