3. (C) ピコもん. All Rights Reserved. 3
Go ⼊入⾨門
Goって?
「Go」は2009年11月10日(米国時間)にGoogleが発表したオープンソースの
プログラミング言語です。
Go言語は、Linux、Mac、Native Clientで動作する開発言語で、Android
携帯上でも動作します。
日本語:http://golang.jp/
公式サイト
英語:https://golang.org/
4. (C) ピコもん. All Rights Reserved. 4
Go ⼊入⾨門
Go言語の特徴
・シンプル!
・コンパイル速度、実行速度が早い!
・安全性が高い!
・並列・同期処理が簡単!
・オープンソース!
・楽しい!
5. (C) ピコもん. All Rights Reserved. 5
Go ⼊入⾨門
Go言語もうちょっと詳しく
・軽量言語並の開発速度
・コーディング規約がかなり決められている
・ウェブサービス作れる
・WAFいろいろ出てる
・ゴルーチンとチャネル
・ほぼオート型指定
・関数の戻り値が複数指定出来る
・配列とスライス
・エラーハンドリングが遅延実行関数で楽ちん
6. (C) ピコもん. All Rights Reserved. 6
Go ⼊入⾨門
package main
import “fmt”
func main() {
fmt.Println(“はろーわーるど!”)
}
Goで「はろーわーるど」
7. (C) ピコもん. All Rights Reserved. 7
Go ⼊入⾨門
package main
import “fmt”
func main() {
fmt.Println(“はろーわーるど!”)
}
Goのお作法 パッケージの名前を宣言する
外部パッケージを呼び出すときはインポート
関数はfunc
実行ポイントはmainパッケージのmain関数
パブリック関数・変数は大文字スタート
(プライベート関数・変数は小文字スタート)
最後にセミコロンとかいらない
8. (C) ピコもん. All Rights Reserved. 8
Go ⼊入⾨門
var message string = “こんにちは”
message := “おはよう”
var count int // (ゼロ値が入る)
var max int = 100
Goの変数代入
固定の型指定や自動的な型予測が出来る
9. (C) ピコもん. All Rights Reserved. 9
Go ⼊入⾨門
// 配列
message := […]string{
“おはよう”,”こんにちは”,”さようなら”}
// スライス
messages := []string{
“おはよう”,”こんにちは”,”さようなら”}
Goの配列・スライス
配列は厳格な値・スライスは操作しやすい
どっちも参照渡し(ポインタ渡し)
10. (C) ピコもん. All Rights Reserved. 10
Go ⼊入⾨門
func printMsg(type int) bool {
switch type {
case 1:
fmt.Println(“おはよう”)
case 2:
fmt.Println(“こんばんは”)
default:
fmt.Println(“こんにちは”)
}
return true
}
Goの関数
引数と戻り値の型を指定する
(switchでbreakいらない)
11. (C) ピコもん. All Rights Reserved. 11
Go ⼊入⾨門
func getMsg(type int) (bool, string) {
msg := “”
err := false
switch type {
case 1:
msg = “こんにちは”
case 2:
msg = “こんばんは”
default:
msg = “さようなら”
err = true
}
return msg, err
}
Goの関数
複数の戻り値を指定できる
12. (C) ピコもん. All Rights Reserved. 12
Go ⼊入⾨門
func getMsg(type int) (err bool, msg string) {
switch type {
case 1:
msg = “こんにちは”
case 2:
msg = “こんばんは”
default:
msg = “さようなら”
err = true
}
return
}
Goの関数
戻り値を事前に定義できる
13. (C) ピコもん. All Rights Reserved. 13
Go ⼊入⾨門
$GOPATH
├── bin
├── pkg
└── src
Goのお作法
開発時のディレクトリ構造
ビルドファイルの出力場所
環境変数で指定
OS環境単位のファイルの自動出力場所
開発中のソース置き場
Githubで管理している場合のsrcの中
$GOPATH/src/github.com/<ユーザー名>/<リポジトリ名>
14. (C) ピコもん. All Rights Reserved. 14
Go ⼊入⾨門
go install ./main.go
go build ./main.go
Go実行方法
go test ./main.go
ビルド
テスト
go run ./main.go
デバッグ実行
go get github.com/go-sql-driver/mysql
欲しいパッケージがあったら
15. (C) ピコもん. All Rights Reserved. 15
Go ⼊入⾨門
type Human struct {}
type Male interface {}
他にもGo
構造体・インターフェース
defer hoge()
panic()
recover()
defer・パニック・リカバー
ゴルーチン・チャネル
go foo()
msg := <- ch
ch <- “ok”
16. (C) ピコもん. All Rights Reserved. 16
Go ⼊入⾨門
いっぱいあって
説明しきれない!
17. (C) ピコもん. All Rights Reserved. 17
Go ⼊入⾨門
「マイクロサービス」化のアーキテクチャ方針を行うのなら
「切り出し可能なサービス」単位で最適な開発言語やDBを
選ぶ必要が出てくる。
の流れは
マイクロサービス!