私が自信を持って書ける言語というと「Java/Python/Dart(Flutter)」なのですが、新しい言語をインプットしておきたいなということで、1週間ほどGo言語をやり込んでみました。
本記事では、普段Javaを仕事で書いているエンジニアがGo言語を1週間やりこんだ感想をお届けします。
ポエム記事のようなものですが、Go言語を勉強してみたいという人に参考になれば幸いです。
なぜGo言語を選んだのか?Goを学ぶ必要性は?
なぜ突然Go言語を勉強し始めたのかというと、主に以下の理由からになります。
- シリコンバレーなどのIT最先端企業で流行している
- サーバーサイドの最適解になる可能性がある
現在すでに様々なところで使われ始めているGo言語ですが、今後も使用する人や企業は増えていくと考えています。
というのも、Go言語には高い保守性とハイパフォーマンス、Googleが開発元という大きなメリットがあるため、サービスやプロダクトを新たに構築するときや、新基盤へのリプレイスなどでプログラミング言語の選択肢になる可能性が高いです。
今後大きく飛躍すると考えられている、Fintechやロボットなどの高速で動くプログラムが求められる分野ではGo言語が選ばれてきていると聞きます。
それだけではなく、既存のプログラムをハイパフォーマンスを出すことができるGo言語への置き換えをすることで、高速で動くサービスに改善していくという使い方にも注目が集まっています。
そのため、日本でも日本ならではのデメリット(使える人が少ない、技術の勉強をしたがらない)さえ越えることができれば、Go言語は使うべき技術になっていくと想定されます。(現時点でもそこそこ多くの求人があるので、Go言語の勢いを感じます。)
日本ではまだまだJavaの求人が多いですが、今後はGo言語の需要が高まると考え、Go言語を勉強することにしました。
※シリコンバレーで流行った技術が、数年遅れで日本でも流行る傾向があるので今のうちに学んでおいて損はないはずです。むしろ将来もプログラミングを仕事で続けたい人は勉強しておくべきのレベルかもしれません。
1週間どのような勉強したか
Go言語を1週間やり込むに当たり、主に以下のことを行いました。
- Udemyの動画講座を2つ受講
- Go言語の特集が組まれている雑誌を購読
- Line Messaging apiを使用したbot作成
Udemyの動画講座を2つ受講
普段新しい言語を学ぶとき、以前は書籍を買っていたのですが最近は動画講座を見るようにしています。
個人的には人が喋っている説明を聞いたほうが理解が進みやすいタイプなので、動画講座をガッツリ活用しています。
(Udemyは30日間返金保証がついているので、受講してみて合わない場合は返金することができるので非常に優れたサービスです。)
今回の学習で受講したの講座は以下の2つです。
いずれも酒井潤さんの講座で、Go言語に入門する場合に非常に良い講座でした。
1つ目のGo入門講座では「環境構築/基本的な構文/Goならではの構文/標準パッケージ/よく使われるパッケージ」を学ぶことができます。
そこまでで講座としては7時間程度ありますが、実際に自分でコードを書いてみたり試してみたりしたので、基礎を学ぶところで10時間くらい使いました。
1つ目の講座の後半と2つ目の講座はいずれも、Go言語を使用してシステムトレードアプリとブロックチェーンを開発してみるものでした。
基礎を学んだ後に、Goならではの構造体やGoroutineを使用した簡単なAPIやWebサイトの作成という、ある程度実践的なプログラムを書くことができた(ほぼ写経ですが)ので、この時点で割とGo言語が馴染んできた感じがしました。
(ちなみにプログラミング初心者の方には実践編は少し難易度が高いように感じたので、基本編でしっかりと時間をかけて学習しておかないと、応用編の受講は難しいかなと思いました。)
プログラム経験がある人にとっては効果的にGo言語に入門できる、素晴らしい講座でした。
Go言語の特集が組まれている雑誌を購読
Go言語の基礎を把握してからは、Go言語の特集が組まれている雑誌を2冊購読しました。
SoftwareDesign 2021年1月号
こちらはGo言語を扱う上でマスターしておくべき機能とも言える、Goroutine、コンテキスト、ポインタ、エラーハンドリングについて初級レベルから応用レベルまで解説してあるため、非常にためになりました。
WEB+DB PRESS Vol.126
WEB+DB PRESS Vol.126では、簡易的な検索エンジンをGo言語初心者でも理解しやすいように解説しながら作成するという特集が組まれています。
こちらはどちらかというと、基礎は終えていて実際に何かを作成したいという人が読むと良い感じかもしれません。
とにかくモノを作ってみるということは、プログラミング学習では大切なことだと思うので、非常にいい特集でした。
Line Messaging apiを使用したbot作成
ある程度インプットをすることができたので、Line Messaging apiを使ったLine botの作成をGo言語でやってみました。
Youtubeのとあるチャンネルで今日動画が投稿されていれば、その動画のURLを送信するLine botを以下のような構成で作成しました。
GitHub Actionsを使用することで、定期的にGoの処理を簡単に走らせることができるので、その日の23:45に実行するようにワークフローを用意しました。
コード自体はYoutubeのRSSフィードを取得し、当日投稿された動画があるかを判定しあればその動画を、なければセロリをLine Messaging apiを使って送るといった感じです。
1週間ほどGo言語をやり込むと、これくらいのものは楽に作成できるようになるようです。嬉しい。
作成したコードは公開しているので、参考にしていただければ幸いです。
Go言語を勉強してみた感想
正直難しい言語だなあと感じながら学習していましたが、すでにいくつかの言語(Java/Python/Dart/PHP)を習得していたので、Go言語の文法などはすぐに比較的すぐに理解できたのではないかなと思います。
一方でポインタを意識して使用する言語を使ったことがなかったので、ポインタについては割とじっくりと時間を掛ける必要がありました。
また、Goroutineやチャネル、コンテキストなどのGo言語特有な処理についても、理解にかなりの時間がかかりました。
Go言語は静的型付け言語ですが、Dartのように推測できる場合は型を指定しなくてもいいなど柔軟な点が非常にいい感じです。
例えば以下のコードには2つの変数がありますが、同じものとなります。
var hello1 string = "ハロー" hello2 := "ハロー" fmt.Println(hello1) // ハロー fmt.Println(hello2) // ハロー
Go言語の難易度は?
あくまでも主観ですが、やや難しいと感じました。
自分がやったことがある他の言語と比較すると、簡単な順で以下のような感じです。
Python > Dart > Java > Go言語
目立つところでいうとポインタやGoroutine、interfaceあたりに壁があります。
また、機能がないことで難しくなるということもあります。
例えばGo言語にはenumや継承、例外処理がありません。
他の言語で割と機能として用意されていることが、Go言語には用意されていなかったりするため、それも難しいと感じる要素になっているかもしれません。
特にJavaを普段やっている身からするとinterfaceの書き方や、継承がないところなどに不都合さを感じたりします。
Go言語を勉強して良かったか?
これはもちろん良かったです!
個人的にプログラミングは好きなので、新しい言語を触ることは非常に楽しいことですし、今後Go言語の需要が伸びてきたら、仕事をする事もできるかもしれません。
近い将来、Javaの仕事がGo言語に置き換わるかもしれないので、しっかりと使いこなせるように修練を積んでおこうと思います。
Javaプログラマが1週間Go言語をやり込むと
1週間ほどしっかりと時間を取って勉強したことで、言語の文法などのキャッチアップ、そしてある程度書けそうだなという感覚を得るところまで持っていく事ができました。
1週間でここまでできるようになったことには、今までの経験が前提知識としてそこそこあったことも響いていると思います。(筆者は7年ほどwebサービスを作る仕事をしています。)
とはいえ、Javaをある程度かじっている人であればGo言語を学ぶためのコストはあまり高くないと感じています。
是非流行りの波が来ているGo言語を習得してみてはいかがでしょうか!