SlideShare a Scribd company logo
1 of 59
Goってどんな言語?
導入実績や気になるトレンド
2018年11月15日 テクトモ#6
Atsushi Yasuda
atsushi.yasuda.jp@gmail.com
All content within this zip file is Copyright 2018 The Go Authors. All rights reserved.
本日の内容
• Go 言語の歴史 – 誕生経緯とバックボーンについて
• Go 言語の特徴 – ほか言語と何がどう違うのか
• 導入事例 – Go 言語の主戦場・何に向いていて何に向いていないのか
• Go の現在のトレンド – 9 周年の振り返りとユーザ調査の結果
• Go の今後の展望 – アップデートサイクルと今後の予定
• これから Go を学ぶには – 最高の Go 言語入門方法について
Go の歴史
誕生経緯とバックボーンについて
Go と他言語の年齢比較1970年代
C言語,
BASIC
1990年代
Java,
PHP,
Python
2010年代
Go,
Rust,
Swift
Go の開発者
http://www.catb.org/~esr/jargon/html/U/Unix.html
Kevin Shockey - https://www.flickr.com/photos/shockeyk/4833152910/in/photostream/
Ken Thompson
C言語, UNIX, 正規表
現, ed, UTF-8
Rob Pike
UNIX, UTF-8, Plan 9
Robert Griesemer
Google Chrome, V8
Go 誕生の背景
•Engineers 1000+
•Lines 1,000,000+
•Machines 100,000,000+
•Mostly C++, Java and Python
 Go 言語はあくまでも実務を
メインターゲットにしてい
る
Go の解決したい課題
• ビルド/コンパイルの遅さ
• コントロールできない依存関
係
• プログラマー間で使用する言
語機能に差がありすぎる
• パッと見て理解しにくいコー
ドが多い
• 同じような努力を重複してす
る必要がある
• 言語の更新コストが辛い
• 複数箇所にある同一コードの
片方だけが更新され続ける
• 自動化ツールが書きづらい
• 言語間をまたがったビルドが
したい
 あくまでも現実の課題を解決
するため、「モダンな言語な
ら持ってるクールな機能」を
あえて提供しない
Rob Pike の言葉
ここでのポイントは、プログラマはGoogle社員であり、研究者で
はありません。
彼らは大抵若く、学校を出たてで、Java や C, C++ もしかしたら
Python を勉強しました。
彼らは素晴らしい言語を理解することはできませんが、それを
使って良いソフトウェアを作りたいと考えています。
なので、私たちが提供する言語は彼らが簡単に理解し、簡単に使
える言語でなければいけません。
Rob Pike, Lang.Next 2014, From Parrallel to Concurrent
Go の特徴
他の言語と何がどう違うのか
Hello, World.
package main
import “fmt”
func main() {
fmt.Println(“Hello, World.”)
}
Hello, World の実行
$ vim hello.go
$ go build –o hello.exe hello.go
$ ./hello.exe
Hello, World.
Hello, World. からみる特徴
package main
import “fmt”
func main() {
fmt.Println(“Hello, World.”)
}
コメント
// 1行コメント
func main() {
/*
複数行コメント
*/
fmt.Println(“Hello, World.”)
}
変数宣言
func main() {
var i int
i = 10
fmt.Printf(“I am %d”, i)
}
制御構造
func main() {
if 1 == 2 {
fmt.Println(“Oops.”)
}
for i := 0; i < 10; i++ {
fmt.Printf(“I am %d”, i)
}
}
構造体や関数の宣言
package foo
type T struct {
x, y int
}
func PlusTen(arg int) int {
return 10 + arg
}
一方、継承や例外、Generics
(Template) などはない
ツールチェイン
• go build – ソースコードをコンパイルする
• go clean – コンパイルされたオブジェクトなどを削除する
• go doc – パッケージのAPIドキュメントを読む
• go fmt – パッケージのフォーマットを整える
• go get – 外部のライブラリをインストールする
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)
}
短所・フォーマットの強制
if i == 1 {
fmt.Println(“Foo”)
}
else if i == 2 {
fmt.Println(“Boo”)
}
コンパイルできる例
if i == 1 {
fmt.Println(“Foo”)
} else if i == 2 {
fmt.Println(“Boo”)
}
 理解しやすく、つかいやすい、
複数人での運用をするプログ
ラム向け
(気軽なスクリプトには不向き)
導入事例
Go 言語の主戦場・何に向いていて何に向いていないのか
Go Users
https://github.com/golang/go/wiki/GoUsers
Ranking Programming Languages by GitHub Users
https://www.benfrederickson.com/ranking-programming-languages-by-github-users/
Tools using Go
•Kubernates
•Terraform
•InfluxDB
•Prometheus
... And more
Go の現在のトレンド
9 周年の振り返りとユーザ調査の結果
Nine years of Go
https://blog.golang.org/9years
Participate in the 2018 Go User Survey
https://blog.golang.org/survey2018
Go 2017 Survey Results
https://blog.golang.org/survey2017-results
Go 2017 Survey Results
https://blog.golang.org/survey2017-results
Go 2017 Survey Results
https://blog.golang.org/survey2017-results
Go 2017 Survey Results
https://blog.golang.org/survey2017-results
Go の今後の展望
アップデートサイクルと今後の予定
リリースサイクル
•1.x 系は半年に一度 (2 月/ 8 月) にリリース
•ツールやパフォーマンス、セキュリティや
標準ライブラリのアップデートがメイン
•言語仕様の変更はあまりなし
•1.x 系は互換性を保ち続けると約束されてい
る
Go 2
• 2017年7月開発スタート
•2018年8月ドラフトデザインが発表
•ロードマップは策定中
Module
Ship production implementation
Implement, evaluate, refine solution
Propose and discuss a solution
Identify and explain a problem
Use go
Error handling, Generics
Ship production implementation
Implement, evaluate, refine solution
Propose and discuss a solution
Identify and explain a problem
Use go
これから Go を学ぶには
最高の Go 言語入門方法について
A Tour of Go
A Tour of Go
A Tour of Go
A Tour of Go
A Tour of Go
A Tour of Go
A Tour of Go
A Tour of Go
A Tour of Go
Getting Started
https://golang.org/doc/install
Go言語のインストール – golang.jp
http://golang.jp/install
How to Write Go Code
https://golang.org/doc/code.html
Goコードの書き方 – golang.jp
http://golang.jp/code
Effective Go
https://golang.org/doc/effective_go.html
標準ライブラリのドキュメント
標準ライブラリのドキュメント
Go ってどんな言語?
導入実績や気になるトレンド
ご静聴ありがとうございました。

More Related Content

Similar to Go言語ってどんな言語? 導入実績や気になるトレンド

初心者向けGo言語勉強会
初心者向けGo言語勉強会初心者向けGo言語勉強会
初心者向けGo言語勉強会leverages_event
 
Easy scripting in Go
Easy scripting in GoEasy scripting in Go
Easy scripting in Gonaoty_bot
 
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine今日から始める Go言語 と appengine
今日から始める Go言語 と appenginea know
 
Goとtest coverage
Goとtest coverageGoとtest coverage
Goとtest coveragenakaji-s
 
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するgoパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するTakuya Ueda
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選Takuya Ueda
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋Takuya Ueda
 
What is "Go" Gopher?
What is "Go" Gopher?What is "Go" Gopher?
What is "Go" Gopher?Ryuji Iwata
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4hirokiky
 
実践Go ツールの作成から配布まで
実践Go ツールの作成から配布まで実践Go ツールの作成から配布まで
実践Go ツールの作成から配布までYusuke Miyake
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Takuya Ueda
 
Go言語でBot開発やってみた
Go言語でBot開発やってみたGo言語でBot開発やってみた
Go言語でBot開発やってみたAkihiko Horiuchi
 
Go静的解析ハンズオン
Go静的解析ハンズオンGo静的解析ハンズオン
Go静的解析ハンズオンTakuya Ueda
 
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法Takuya Ueda
 
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerGoのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerHirokazu Fukami
 
Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]Sho A
 

Similar to Go言語ってどんな言語? 導入実績や気になるトレンド (20)

初心者向けGo言語勉強会
初心者向けGo言語勉強会初心者向けGo言語勉強会
初心者向けGo言語勉強会
 
社内勉強会1 go lang
社内勉強会1 go lang 社内勉強会1 go lang
社内勉強会1 go lang
 
Easy scripting in Go
Easy scripting in GoEasy scripting in Go
Easy scripting in Go
 
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
 
Goとtest coverage
Goとtest coverageGoとtest coverage
Goとtest coverage
 
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するgoパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
 
Golang入門
Golang入門Golang入門
Golang入門
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
 
What is "Go" Gopher?
What is "Go" Gopher?What is "Go" Gopher?
What is "Go" Gopher?
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4
 
実践Go ツールの作成から配布まで
実践Go ツールの作成から配布まで実践Go ツールの作成から配布まで
実践Go ツールの作成から配布まで
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
 
Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
 
Go言語でBot開発やってみた
Go言語でBot開発やってみたGo言語でBot開発やってみた
Go言語でBot開発やってみた
 
先取り Go1.5
先取り Go1.5先取り Go1.5
先取り Go1.5
 
Go静的解析ハンズオン
Go静的解析ハンズオンGo静的解析ハンズオン
Go静的解析ハンズオン
 
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法
 
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerGoのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
 
Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]
 

More from Atsushi Yasuda

負債返済の下準備「コメント付与まつり・準備編」
負債返済の下準備「コメント付与まつり・準備編」負債返済の下準備「コメント付与まつり・準備編」
負債返済の下準備「コメント付与まつり・準備編」Atsushi Yasuda
 
モデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのかモデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのかAtsushi Yasuda
 
コードを削除し続けるという習慣
コードを削除し続けるという習慣コードを削除し続けるという習慣
コードを削除し続けるという習慣Atsushi Yasuda
 
苦いお酒が好きな人のためのコードの苦味の味わい方
苦いお酒が好きな人のためのコードの苦味の味わい方苦いお酒が好きな人のためのコードの苦味の味わい方
苦いお酒が好きな人のためのコードの苦味の味わい方Atsushi Yasuda
 
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項Atsushi Yasuda
 
たまにはこんなSushiも如何でしょう?
たまにはこんなSushiも如何でしょう?たまにはこんなSushiも如何でしょう?
たまにはこんなSushiも如何でしょう?Atsushi Yasuda
 
データベース定義書の更新は再考の仕事
データベース定義書の更新は再考の仕事データベース定義書の更新は再考の仕事
データベース定義書の更新は再考の仕事Atsushi Yasuda
 
click するとどうなるのか
click するとどうなるのかclick するとどうなるのか
click するとどうなるのかAtsushi Yasuda
 

More from Atsushi Yasuda (9)

負債返済の下準備「コメント付与まつり・準備編」
負債返済の下準備「コメント付与まつり・準備編」負債返済の下準備「コメント付与まつり・準備編」
負債返済の下準備「コメント付与まつり・準備編」
 
モデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのかモデル設計を適当にやるとどうなるのか
モデル設計を適当にやるとどうなるのか
 
コードを削除し続けるという習慣
コードを削除し続けるという習慣コードを削除し続けるという習慣
コードを削除し続けるという習慣
 
苦いお酒が好きな人のためのコードの苦味の味わい方
苦いお酒が好きな人のためのコードの苦味の味わい方苦いお酒が好きな人のためのコードの苦味の味わい方
苦いお酒が好きな人のためのコードの苦味の味わい方
 
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
寿司x職人 10年働いて思いを馳せるすし職人とエンジニアの共通項
 
たまにはこんなSushiも如何でしょう?
たまにはこんなSushiも如何でしょう?たまにはこんなSushiも如何でしょう?
たまにはこんなSushiも如何でしょう?
 
データベース定義書の更新は再考の仕事
データベース定義書の更新は再考の仕事データベース定義書の更新は再考の仕事
データベース定義書の更新は再考の仕事
 
I love bug
I love bugI love bug
I love bug
 
click するとどうなるのか
click するとどうなるのかclick するとどうなるのか
click するとどうなるのか
 

Go言語ってどんな言語? 導入実績や気になるトレンド

Editor's Notes

  1. こんにちは。今日はお集まり頂き、ありがとうございます。 ただいまご紹介にあずかりました安田あつしです。 元クラウドワークスの社員で、クラウドワークスに来る前にちょこっと、卒業後はがっつりと Go 言語を使ってサーバ周りのコードを書く仕事をしています。 今日は「Go ってどんな言語?」ということで40分ほどお付き合いいただけたらと思います。 せっかくこんなタイトルですので、ぜひ、Goって面白いな。ちょっと勉強してみようかな。と、思っていただければと思います。
  2. さて、Go 言語。こんなロゴをしています。 ちょっと前まではユニークなキャラクターがいましたが、色々あって今はこのロゴです。 Go 言語、触ったことあるよという方はどれくらいいらっしゃいますでしょうか? (感想をみて一言) 多かった場合: 思ったよりも多いですね(笑) では、Goのコンセプトの復習がてら40分お付き合いください 少なかった場合: お、期待大ですね。では、今日はGoの魅力についてお話しいたしますので、40分じっくりお付き合いください。
  3. 今日、お話するのはこんな内容です。 先ずは歴史から。 Golang は比較的若い言語ですが、きちんとしたバックボーンを元に開発されています。 ついで言語の特徴を他のプログラミング言語と比較しながら説明いたします。 導入事例の章では Golang の使用シーンや企業、ツールなどを紹介しつつ、どのような時に Golang を使えるか提示できればと思います。 現在のトレンドと今後の展望で、go言語の最近の開発状況などについて紹介します。 最後の「これから Go を学ぶには」では、今日帰ってからすぐにでも入門を始められる Tour of Go の紹介と、 参考となるサイトについて紹介させていただければと思います。よろしくお願いいたします。
  4. さて、早速 Go の歴史から紹介していきましょう。
  5. 意外にも Go はかなり若い言語です。誕生したのは 2007 年後半 [^history_of_go] で、発表されたのは2009年11月、そして、バージョン1がリリースされたのは2012年3月です。 C言語は1970年代 [^history_of_c], Java, PHP, Ruby, Python は 1990年代中頃 [^history_of_java] [^history_of_php] [^history_of_ruby] [^history_of_python] であることを 考えると、だいぶ新しい言語だということをわかってもらえると思います。
  6. 若い言語である 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 の開発者でした。
  7. Golang はこの 3 人が当時 Google 内部で抱えていた問題を解決するために生み出された言語です。 当時、Google内部では数千人の開発者が作成した数百万行のコードで作られた巨大なソフトウェアが巨大なハードウェアで動いていました。 コードの大半は C++ で、 Java と Python も様々なところで使われていました。 Google では単一リポジトリを使用しているため、日々ソースコードが更新され、巨大な分散ビルドシステムによりビルドされていました。 巨大なシステムなので開発は遅くなりがちかつコードは修正しづらいものでした。 Go 言語はこのような環境から生まれました。 開発のしやすさと扱いやすさを取り除くことがGoの目的でした。
  8. ここでのポイントは、Go はプログラミング言語の学問的な設計を重視していないことです。 あくまでも、プログラマが開発をしやすくするために言語が設計されています。
  9. 具体的には、当時の Google が抱えていた課題を解決するために言語設計がされました。 例えばビルドやコンパイルが遅すぎる問題、依存ライブラリやクラス・モジュールの依存関係が複雑になってしまう問題、 言語の機能が多いので、人によって使う機能・使わない機能にばらつきがある問題。 気軽に使える PHP や ruby でも、generator や yield, フリップフロップ構文など、人によっては使ったことない言語の機能がありますよね? 結果として起きてしまう、パッと見てわかりにくコードが多くなってしまう問題。 他にもコーディング規約の決定やルールの設定など同じような努力を毎回する必要がある点や、 言語自体のアップデートコストが地味に辛い点、リファクタリングが必要になる点、 自動化ツールが書きづらい点、言語を切り替えたビルドもサポートしたい点などが主張な課題としてあげられました。
  10. これらの問題を解決することを重視しているため、Go言語では「モダンな言語なら持ってるあの機能」などがあえて 実装されていなかったりします。
  11. 開発者の一人である Rob Pike は公演で、意訳するとこんなことを言って [^from_parallel_to_concurrent] います。 ここでのポイントは、プログラマはGoogle社員であり、研究者ではありません。 彼らは大抵若く、学校を出たてで、Java や C, C++ もしかしたら Python を勉強しました。 彼らは素晴らしい言語を理解することはできませんが、それを使って良いソフトウェアを作りたいと考えています。 なので、私たちが提供する言語は彼らが簡単に理解し、簡単に使える言語でなければいけません。 意訳をすると、簡単に理解し、簡単に使える言語であるために、エレガントな機能などはあえて削られているのが go 言語です
  12. では、早速 Go の特徴を見ていきましょう 「理解しやすく、使いやすい」ことを目的として作られた言語ですので、他の言語を使ったことがある方なら なんとなく使えてしまえるような言語となっています。 ただし、保守性などの観点から、いくつか癖があるので、そこだけは気をつける必要があります
  13. まずは Hello,World. を見て見ましょう。 ソースコードはこんな感じです。 C言語やJavaっぽさを残しつつも、しかしまぁ見たことある感じに見えるかと思います。
  14. Go のインストールされたコンピュータでこのコードを例えば hello.go という名前でかき、 コンパイルすることで実行できます。 ここでは細かく解説しませんが、いくつか Go 言語の特徴が出ています。 まず、Go はコンパイル言語で、実行するためにはコンパイルが必要です。コンパイルすることで一つの実行可能ファイルが生成されます。 一見すると面倒なように見えますが、これにより例えばデプロイするためにはその一つのファイルをサーバに持っていくだけでよくなる、 実行速度がそこそこ早い、コンパイルエラーなどにより実行前にある程度のバグを検出できるなど、 使い捨ての気軽なスクリプトが書きづらくなるデメリットを上回る、実運用しやすくなるメリットがあります。
  15. ソースコードを見て見ましょう、go で書かれたプログラムは main パッケージの main 関数から実行され、main 関数を抜けるとプログラムは終了します[^proguram_execution]。 組み込み関数 [^built_in_function] はいくつかありますが、15個しかなく、たいていの関数は外部パッケージの中に定義されています。 ここでは、 標準 `fmt` パッケージを `import` 文で読み込み、main関数の中で使っているのがわかるかと思います。 標準パッケージは 140 個以上あり、たいていのプログラミングで使う機能はサポートされています。 また、全て文書化されている上にソースコードが公開されているので、 go の書き方を学ぶことができます。
  16. その他の文法を軽く説明すると コメントは C++ みたいな1行コメントと複数行コメントがかけ
  17. 変数の宣言日は var を使い、型は後置で書きます。
  18. if 文や for 文など制御構造があり、
  19. 構造体や関数が定義できます。 細かな文法は後で勉強するとして、ここまではまぁ、一般的なプログラミング言語でも、多少の違いや癖はありますが、見慣れたものかと思います。
  20. 一方で、Go 言語に、言語として提供していない機能がたくさんあります。 例えば継承や例外、Generics はありません。 歴史でも述べた通り、Go 言語はプログラミングのしやすさと保守のしやすさ、そしてコンパイル速度、コンセプトの一貫性などが重視されているためです。 逆に言うと、強力だけれど使いかたを間違えると大変なことになる。黒魔術になる文法は捨てられています。
  21. 別の特徴の一つとして、豊富なツールチェインが挙げられます。 Go 言語は触り始めた人がわかりやすく、迷いなく使えるように、開発でよく使うツールは公式が最初から標準的にサポートしています。 例えば、ドキュメンテーションツール。C なら Oxygen, Java なら Javadoc, ruby なら RDoc といったようなツールを Go は最初から go コマンドの中に備えています。 フォーマッタも最初から備えられており、また、`go fmt` コマンドは、警告を出すのではなく、勝手にソースコードを整形してくれます。 これにより、チーム内での細かな宗教論争から解放されますし、ツールに怒られてもコマンドを実行すれば勝手に治ります。 その他静的解析ツールの `go vet` や go のバージョンアップ時に古い API 呼び出しを治す `go fix` など 開発でよく使うツールは最初から大体組み込まれています。
  22. 例えば、外部ライブラリをインストールする go get を使えば、簡単に github などにあるライブラリをインストールし、 自分のプログラムで使うことができるようになります。
  23. いくつか短所もあります また、go 言語界全体でのルールに縛られる必要があります。フォーマッタが go のツールチェインに組み込まれているので、 自由な書き方はできません。 具体的には以下の書き方はそもそもコンパイルが通りません。
  24. こう書かないとコンパイルできません 大変うるさいですが、これは十数人以上で開発をしている時でも、誰が書いても同じコードになるように設計されているためです。 コンパイルエラーじゃなくて警告でもいいんじゃないかと言うのもその通りなのですが、 警告じゃなくてコンパイルエラーなので、逆にルールに則らないコードは一切コミットとかできないように作られています。 また、最近のエディタであれば、たいていの場合保存時に勝手に go fmt をかけ、自動的に整形してくれる機構が組まれていたりします。
  25. 繰り返しになりますが、 「理解しやすく、使いやすい」ことを目的とし、そして複数人での開発運用がしやすいように 言語レベルで設計されたのが Go 言語です。 なので、誰が書いても同じようなコードになるような言語ともいえるでしょう。 使い捨てのスクリプトなどには全く向いていませんが、反面、複数人での運用を見据えたプログラムを書くにはとても向いている言語です。
  26. Go 言語はどこで使われているのでしょうか? 導入事例を紹介しながら、何に向いていて何に向いていないかの説明をしていきましょう。
  27. https://github.com/golang/go/wiki/GoUsers を見るのが手っ取り早いのですが、まず、当たり前のように Google そして Adobe や Booking.com, CircleCI, CloudFlare, Dell, Heroku, IBM, Intel, Lyft, MongoDB, Mozzilla, Netflix, Oracle, SoundCloud, Uber, WMWare, まぁ、数多くのアメリカベンチャーや、 Bengo4.com, Cookpad, CyberAgent, DeNA, freee, GMO, Gunosy, Hatena, KAYAC, M3, Mercari, pixiv, SAKURA Internet inc, VOYAGE といった国内ベンチャーなど、数多くの企業で使われているのがわかるかと思います。
  28. 今年初めに書かれた [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 の採用が向いているといえるでしょう。
  29. ツール作りのための言語としても人気です。 まず、ツール作りのしやすさの理由として、Go 言語はコンパイルすると一つの実行可能ファイルになると言う点が挙げられます。 例えば、javascript や ruby でツールをかくと、人によって ruby のバージョンが違ったり、依存するライブラリがインストールされていなくて動かなかったり 環境問題が発生するケースがあります。 Go 言語はコンパイルすると一つの実行可能ファイルになるので、それを持ってくれば他の依存なしで動くと言うメリットがあり、社内ツールなどでは喜ばれます。 ツールの代表例としてはオーケストレーションツールの k8s や Terraform, 時系列データベースの influxDB, システム監視ツールの prometheus などが挙げられると思います。
  30. Go の現在のトレンドということで、ちょうど 5日前の 11/10 に Go 言語 9 周年の振り返り記事が Go Blog に投稿されたので、軽く紹介していきましょう
  31. まず、アメリカの各種エンジニア向け調査、例えば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 の展望で触れたいと思います。
  32. ちょうど、現在、 Go使用者の調査がGoコミュニティで行われている最中です。
  33. 参考に、2018年年初に発表された、[Go 2017 Survey Results](https://blog.golang.org/survey2017-results) を見ていきましょう。
  34. まず、2016 の結果から、 2017 の結果で大きく変わったのは、仕事でGoを書く人が、趣味としてGoを勉強している人を上回ったことです。 実務での使用が着実に増えていることがわかるかと思います。
  35. また、API/RPC プログラムや CLI ツールの使用用途が上位に来ています。これは Go の得意とする分野です。 反対にいうと、UI や Web のフロントエンド、データ処理や軽量スクリプト向けではそんなに人気がありません。
  36. Go ユーザの環境を見て見ると Linux が 64%, Mac が 49%, Windows が 18% となりました。 エディタでは VSCode が大人気になりました。 Go 言語はマルチプラットフォームで動くので、Windows 上での開発も人気なようです。 繰り返しになりますが、2018年の調査はちょうどいま行われているところです。 9周年の振り返り記事でも見たように、Go言語はちょうどいま、成長を続けているところです。 私としては、Go 言語の特徴でもある「学びやすさ」「使いやすさ」を考えるとじわじわとあと5−6年は伸び続けるのではないかなと感じています。
  37. Go の今後の展望についてみていきましょう。
  38. Go 言語のアップデートは今も続いています。 リリースサイクルは6ヶ月ごとで、現在の最新版は 1.11 が 8 月にリリースされました。 とはいえ、安定した言語ですので、大幅な言語機能の追加などはあまりありません。 Go のアップデートでは、言語仕様での大きな変更はあまり、はいりません。 たいていの場合ツールやパフォーマンス、標準ライブラリのアップデートがメインです。 また、 1.x 系のアップデートは互換性を保ち続けています。[](https://golang.org/doc/go1compat) これも、そもそも長期的な運用や使いやすさを目的として開発された言語の特徴の一つでしょう。
  39. それとは別に、 Go 言語自体の大きなアップデートである Go 2 は 2017年7月に開発がスタートし[](https://blog.golang.org/toward-go2)、 今年の 8月、ドラフトデザインが発表されました。 こちらはまだまだロードマップの策定中の段階ですが、着々と新機能が計画されている段階です。 特に、さきほども説明したユーザ調査で強く要望の上がっていたエラー処理、ライブラリのバージョン管理、 そして Generics の導入などが検討されています。 とはいえ、Goのコンセプトである使いやすさや学びやすさを重視すべく、それぞれかなり慎重に検討されています。
  40. まず、新仕様の導入は次の5ステップを経て行われています。 調査による需要調査、問題点の明確化、解決策のディスカション、実装・評価・テスト、そしてリリースです。 ライブラリのバージョン管理は実装中
  41. エラー処理と Generic に関してはそもそも何が問題なのかの議論中というステータスです Go 2 に関しては、もう少し先の話になるかと思いますので、安心して 1.x 系に入門されるのが良いかと思います。
  42. さて、長かった Goってどんな言語?導入事例や気になるトレンドも最後です。 今までお付き合いいただきありがとうございました。 どうでしたか? Go 言語に興味を持っていただけましたでしょうか? 最後に、Go言語を新しく勉強するための最もオススメの方法について紹介していければと思います。
  43. Go 入門としてベストなのは Tour of Go でしょう。 Go言語基礎文法最速マスターとも書かれている通り、最も素早く、最も簡単に Go 言語を学ぶことができます。 また、ほとんど全ての文法を網羅しています。 後ですぐにでも試せるように、画面の説明をしましょう。
  44. 画面の左側は説明になります。例えば、Package のページではパッケージについての説明が書かれています。
  45. 全体的な目次は左上の A Tour of Go から
  46. 細かな目次は右上のハンバーガーメニューをクリックすると、すぐにたどることができます。 日本語版サイトでは、目次は英語ですが、説明文はすべて日本語で書かれていますので安心してください。
  47. ページの移動は左下の矢印リンクで移動できます。
  48. A Tour Of Go では、右側のテキストエリアで、自由にプログラムの実行ができます。
  49. プログラムをテキストエリアに書いた後、
  50. Format で整形でき、Run で実行できます。
  51. 実行結果はすぐに表示されます。 ですので、左側の説明文を読んだ後、すぐにソースコードを動かして試してみることができます。
  52. 一通り文法を学んだ後、すぐにインストールしたくなるかと思います。 インストール方法は公式サイトが詳しいのですが
  53. 幸いなことに公式サイトの日本語訳が golang.jp にまとまっています。
  54. 文法を学んで、インストールができたら早速何かプログラムを書き始めたくなるかと思います。 実際のプログラミングでは、例えばディレクトリ構成や、テストの書き方などでつまづくことがありますよね? Go 言語の場合、パッケージの構成などについて [How to Write Go Code](https://golang.org/doc/code.html) にまとまっています。
  55. 日本語訳が golang.jp にありますし、Chrome の自動翻訳でもなんとか読めると思いますので、是非読んでみてください。 だいたいこの3つをやれば、たいていのプログラム。例えば、 HTTP で JSON をやり取りする API サーバなどが書けるようになっているはずです。
  56. コードをよりよく書きたい場合、公式サイトの Effective Go が、日本語訳であれば golang.jp の翻訳記事が役に立つはずです。
  57. コードをよりよく書きたい場合、公式サイトの Effective Go が、日本語訳であれば golang.jp の翻訳記事が役に立つはずです。 また、細かなテクニックに関しては、標準パッケージの実装が参考になるでしょう Go の標準パッケージのドキュメントは、関数の説明のみならず、ソースコードへのリンクが用意されています。
  58. 実装をみることで、例えば、コメントをどう描くと、後で HTML に変換した時にどうなるかなどのテクニックを学ぶことができるはずです。 公式サイト上の情報で仕事に必要な範囲であればほとんど全ての項目がカバーできるようになっているのも Go 言語の学びやすくて使いやすいという特徴を表していると思います。
  59. さて、入門は以上です。 興味を持っていただけましたら、早速、A Tour of Go をやってみませんか? 以上、Goってどんな言語?導入事例や気になるトレンド、ご静聴ありがとうございました。