21. ツールチェイン
• go build – ソースコードをコンパイルする
• go clean – コンパイルされたオブジェクトなどを削除する
• go doc – パッケージのAPIドキュメントを読む
• go fmt – パッケージのフォーマットを整える
• go get – 外部のライブラリをインストールする
22. go get
$ go get github.com/google/go-github/github
--
package main
import ”github.com/google/go-github/github”
func main() {
client := github.NewClient(nil)
}
23. 短所・フォーマットの強制
if i == 1 {
fmt.Println(“Foo”)
}
else if i == 2 {
fmt.Println(“Boo”)
}
24. コンパイルできる例
if i == 1 {
fmt.Println(“Foo”)
} else if i == 2 {
fmt.Println(“Boo”)
}
41. Error handling, Generics
Ship production implementation
Implement, evaluate, refine solution
Propose and discuss a solution
Identify and explain a problem
Use go
今日、お話するのはこんな内容です。
先ずは歴史から。 Golang は比較的若い言語ですが、きちんとしたバックボーンを元に開発されています。
ついで言語の特徴を他のプログラミング言語と比較しながら説明いたします。
導入事例の章では Golang の使用シーンや企業、ツールなどを紹介しつつ、どのような時に Golang を使えるか提示できればと思います。
現在のトレンドと今後の展望で、go言語の最近の開発状況などについて紹介します。
最後の「これから Go を学ぶには」では、今日帰ってからすぐにでも入門を始められる Tour of Go の紹介と、
参考となるサイトについて紹介させていただければと思います。よろしくお願いいたします。
若い言語である Go ですが、開発者たちはだいぶベテランです。
最初の主な開発者は Robert Griesemer, Rob Pike, Ken Thompson の 3 人で、特に
Rob Pike は UNIX, UTF-8, Plan 9 の開発者, Ken Thompson は C, UNIX, 正規表現, ed, UTF-8 の開発者でもあります。
また、 Robert Griesemer は Google Chrome の JavaScript エンジン V8 の開発者でした。
Golang はこの 3 人が当時 Google 内部で抱えていた問題を解決するために生み出された言語です。
当時、Google内部では数千人の開発者が作成した数百万行のコードで作られた巨大なソフトウェアが巨大なハードウェアで動いていました。
コードの大半は C++ で、 Java と Python も様々なところで使われていました。
Google では単一リポジトリを使用しているため、日々ソースコードが更新され、巨大な分散ビルドシステムによりビルドされていました。
巨大なシステムなので開発は遅くなりがちかつコードは修正しづらいものでした。
Go 言語はこのような環境から生まれました。
開発のしやすさと扱いやすさを取り除くことがGoの目的でした。
今年初めに書かれた [Ranking Programming Languages by GitHub Users](https://www.benfrederickson.com/ranking-programming-languages-by-github-users/)
によれば、Go 言語は人気ランキングでは第9位となっていますが、人気急上昇のランキングでは1位となっていました。
Go 言語の主戦場は、主にツールやサーバサイド系です。
サーバサイドは go 言語の主戦場です。
元々 Google 社内の多数のサーバプログラムを書くために生まれた言語なので、軽量で素早く動き、
またメンテナンス製の高いコードで長く保守していくことができます。
具体的にはバッチサーバやシンプルな API サーバを書くときなどに Go lang の採用が向いているといえるでしょう。
Go の現在のトレンドということで、ちょうど 5日前の 11/10 に Go 言語 9 周年の振り返り記事が
Go Blog に投稿されたので、軽く紹介していきましょう
まず、アメリカの各種エンジニア向け調査、例えばStack Overflow の調査などで、Go は愛されている言語はベスト5に入るなど、
だいぶ健闘をしました。ActiveState の調査や JetBrains, HackerRanks の調査などでも Go の人気は伸びています。
また、世界各地で Go 関連のミートアップやカンファレンスが行われ、今年は300以上のカンファレンスが開かれました。
5年前に最初のカンファレンスが開かれたことを考えると、成長は著しい限りです。
日本でも Go Conference が 2013年から開かれており、 Go conference 2018 がちょうど10日後の 11/25 に開催されます。
Go 言語のコミュニティは成長を続けており、Code of conduct も今年、更新がなされました。
Go 2 についても動きがありましたが、これは次の Go の展望で触れたいと思います。
また、API/RPC プログラムや CLI ツールの使用用途が上位に来ています。これは Go の得意とする分野です。
反対にいうと、UI や Web のフロントエンド、データ処理や軽量スクリプト向けではそんなに人気がありません。
Go ユーザの環境を見て見ると Linux が 64%, Mac が 49%, Windows が 18% となりました。
エディタでは VSCode が大人気になりました。
Go 言語はマルチプラットフォームで動くので、Windows 上での開発も人気なようです。
繰り返しになりますが、2018年の調査はちょうどいま行われているところです。
9周年の振り返り記事でも見たように、Go言語はちょうどいま、成長を続けているところです。
私としては、Go 言語の特徴でもある「学びやすさ」「使いやすさ」を考えるとじわじわとあと5−6年は伸び続けるのではないかなと感じています。
Go の今後の展望についてみていきましょう。
Go 言語のアップデートは今も続いています。
リリースサイクルは6ヶ月ごとで、現在の最新版は 1.11 が 8 月にリリースされました。
とはいえ、安定した言語ですので、大幅な言語機能の追加などはあまりありません。
Go のアップデートでは、言語仕様での大きな変更はあまり、はいりません。
たいていの場合ツールやパフォーマンス、標準ライブラリのアップデートがメインです。
また、 1.x 系のアップデートは互換性を保ち続けています。[](https://golang.org/doc/go1compat)
これも、そもそも長期的な運用や使いやすさを目的として開発された言語の特徴の一つでしょう。
それとは別に、 Go 言語自体の大きなアップデートである Go 2 は 2017年7月に開発がスタートし[](https://blog.golang.org/toward-go2)、
今年の 8月、ドラフトデザインが発表されました。
こちらはまだまだロードマップの策定中の段階ですが、着々と新機能が計画されている段階です。
特に、さきほども説明したユーザ調査で強く要望の上がっていたエラー処理、ライブラリのバージョン管理、
そして Generics の導入などが検討されています。
とはいえ、Goのコンセプトである使いやすさや学びやすさを重視すべく、それぞれかなり慎重に検討されています。
文法を学んで、インストールができたら早速何かプログラムを書き始めたくなるかと思います。
実際のプログラミングでは、例えばディレクトリ構成や、テストの書き方などでつまづくことがありますよね?
Go 言語の場合、パッケージの構成などについて [How to Write Go Code](https://golang.org/doc/code.html) にまとまっています。
コードをよりよく書きたい場合、公式サイトの Effective Go が、日本語訳であれば golang.jp の翻訳記事が役に立つはずです。
コードをよりよく書きたい場合、公式サイトの Effective Go が、日本語訳であれば golang.jp の翻訳記事が役に立つはずです。
また、細かなテクニックに関しては、標準パッケージの実装が参考になるでしょう
Go の標準パッケージのドキュメントは、関数の説明のみならず、ソースコードへのリンクが用意されています。
実装をみることで、例えば、コメントをどう描くと、後で HTML に変換した時にどうなるかなどのテクニックを学ぶことができるはずです。
公式サイト上の情報で仕事に必要な範囲であればほとんど全ての項目がカバーできるようになっているのも
Go 言語の学びやすくて使いやすいという特徴を表していると思います。
さて、入門は以上です。
興味を持っていただけましたら、早速、A Tour of Go をやってみませんか?
以上、Goってどんな言語?導入事例や気になるトレンド、ご静聴ありがとうございました。