浜松町駅は、JR京浜東北線、山手線、東京モノレール、都営地下鉄大江戸線、浅草線がありどこからでもアクセスしやすい便利な街です。道を歩いていると、近景に東京タワーを楽しむことができます。また、東京タワーの夜のライトアップは […]
Go言語での開発を試してみる 〜調べる編〜

こんにちは。haruhikonyanです。
自分go言語というものを実はこれまで触ったことが無かったのでちょいと触ってみることにしました。
とはいえ何がやりたいとかそういうことは無いのでとりあえず Hallo World と開発のための道具としてはどういうものがあるかを調べてみようと思います。
目次
go言語のインストール
まずはインストールから。
調べるにもとりあえず手元でgo自体が動かないとつらいものがあると思うのでインストールします。
windows 版
- インストーラダウンロード
 公式 の Downloads ページより Microsoft Windows を落としてきます。
- インストール
 落としてきたインストーラーをそのまま実行
- バージョン確認
> go version go version go1.10.3 windows/amd64無事インストールされて PATH も自動的に通してくれています! 
[adinserter block="1"]
mac 版
- homebrew でインストール
 自分は普段から homebrew を使っているのでインストーラは使わずに homebrew でインストールします。$ brew install go
- バージョン確認
$ go version go version go1.10.3 darwin/amd64こちらも無事インストール完了です。 Hello World書いてみるとりあえず公式のトップにある下記コードを拝借し、保存。 package main import "fmt" func main() { fmt.Println("Hello, 世界") }> go run hello.go Hello, 世界簡単ですね! コンパイルGo言語で書いたコードはデフォルトでクロスコンパイルに対応しているということで早速試してみます。 - Windows
 windows環境で試しているのでそのままビルド> go build hello.goなんとexeが吐き出されます! 
 それをcmd上で実行してみると?>hello.exe hello, 世界ちゃんと出力されました! 
- Mac
 次は mac 用に出力してみることにします。>SET GOOS=darwin >SET GOARCH=amd64 >echo %GOOS% darwin >echo %GOARCH% amd64上記のように環境変数をセットしてあげます。 
 すると、helloというバイナリファイルが出力されました。
 そいつを手元の mac に送ってターミナルで実行してみると?$ ./hello hello, 世界
 どんな環境でも同じコードで動く!楽しい! 本格的に開発するために必要なうんちくこの章はGo言語あまり関係ないんで飛ばしてくれて構いません。 
 Go言語開発を始める上で他言語で開発を始める上で気にしていることを述べています。フレームワークの有無開発を行う上で言語の選定と同じ、それ以上に重要なこととしてフレームワークの選定があると思います。 
 何を作るにしても大体は先人が同じようなことを行なっていることがほとんどで、そのライブラリであったり、フレームワークを選定し、優れたフレームワークのある言語で開発を行うという選択が開発を成功させることであったり、工期を短くする秘訣であったりします。
 例えば Ruby には Ruby on Rails という優れた web フレームワークがあったからこそ莫大な人気が出たと言っても過言ではありません。
 他にも Java の Spring や PHP の Laravel、 Python の Django といったフレームワークが人気が高く幅広く使われていると言えるでしょう。
 また、フレームワークを採用することでチーム開発をする上でのコーディング規約などが自然と揃い、読みやすくなるという利点もあると言えるでしょう。
 車輪の再開発を悠長にやっている暇は無いのです。使えるものを使いましょう。開発エディタ候補開発環境においてもVSCodeやAtomのようなテキストエディタに拡張機能を追加して機能を充実させていくようなタイプのエディタもあれば、Java でいう Ecripce や IntelliJ のようなすでにデバッガ機能などが充実した IDE(統合開発環境)という大きな二つの選択に分かれると言えます。 
 前者のテキストエディタがベースのものではまず軽いといったメリットがありますが、機能を増やすには拡張機能を探して自分で入れる必要があったり、全ての要件を満たそうとすると自分で色々調べたりしなければならないのが欠点とも言えると思います。また、全てを詰め込もうとするとエディタ自体も重くなってしまうとうことも十分考えられます。
 後者の IDE では専用ということもあり、機能は一通り揃っているが、エディタ自体が重いということもよくあることです。
 エディタはよく Vim vs Emacs というような宗教戦争などと揶揄されるようにエンジニア個人の好みも大きく分かれるところです。開発効率にも大きく影響する部分だと思うのでベストな選択をしたいところです。パッケージ管理開発を行う上でライブラリやパッケージの依存管理はほぼ必須と言ってもいいでしょう。 
 node.js には npm や yarn といったものがあったり、Ruby では Gemであったり、他にもさきほど Mac で Go をインストールするために使った Homebrew もパッケージ管理システムです。
 これらにパッケージ管理を任せることで、だれがアプリをビルドしても必ず同じパッケージ構成にできるというのも大きな利点の一つです。
 開発をする上で依存関係を人間が細かく気にすることなく進める上では欠かせない存在であると言えます。Go で本格的に開発するための道具候補フレームワークwebフレームワークばかりになってしまいましたが、フレームワークの紹介です。 - Gin
 のちに紹介する Martini に似た作りとなっており、公式サイトでは Martini に比べて45倍のパフォーマンスが出るとうたっています。
 Github の Star は 19,179
- beego
 Web用の MVC フレームワークで Bee ツールを利用することで様々な機能を使うことのできるフルスタックのフレームワーク
 Github の Star は 16,314
- Echo
 Gin よりもパフォーマンスが出るとのことで、シンプルで最小を目指したフレームワーク
 Github の Star は 11,123
- iris
 こちらもシンプルで最速をうたっています
 Github の Star は 11,110- 参考記事
 
- Revel
 フルスタックなWebフレームワークで Ruby 製の Rails の 3~10倍のパフォーマンスとうたっています
 Github の Star は 10,071
- Martini
 Gin と比べられて遅いと言われいたり、Github を見る限り最近は更新が無い模様。。。
 Github の Star は 10,217
- Gorilla
 こちらはフレームワークではなくwebに関するツールキット
 Github の Star は一番多い mux という URL router で 6,648
- Visual Studio Code
 Microsoft 製のエディタで基本的にはプラグインを追加して使う
- GoLand
 JetBrains 製のIDE
 30日フリートライアル期間があり、それ以降はライセンス料を払っての利用となる
 環境設定などをすべてGUIで行うことができ、初期状態でテストが可能だったりする。- 参考記事
 
- Atom
 GitHub 製で Visual Studio Code と同じく基本的にはプラグインを追加して使う
 Visual Studio Code に比べて動作が重いと言われてたりする- 参考記事
- ATOMでGolangの環境設定
 パッケージ管理
 
- ATOMでGolangの環境設定
 
- 参考記事
- dep
 公式が開発している依存関係管理ツール
 特にこだわりが無ければ現在ではこれを使えば良いと思う
- glide
 dep が登場する前に存在したサードパーティー製のパッケージ管理ツール
- vgo (Versioned Go)
 Go1.12で正式導入予定のバージョン管理ツール
 現在の最新であるGo1.11で使ってみることは可能であるが、まだ発展途中で人類にはまだ早いとの噂も。。。
- 使わない
 パッケージ管理しないといけないような粒度の成果物つくるのは Go じゃなくていい説という話も。。。
 次回予告次回は後編ということで実際にこれらの調べた要素を組み合わせて簡単な何かを作ってみたいと思います。 [adinserter block="1"] >Go言語での開発始めてみる〜開発環境を作る編〜 
 >Go言語での開発始めてみる〜beego のコード自動作成機能を試す編〜 haruhikonyan 大きな野望を抱くホルン吹き。 
- Windows






