11. 関数定義と呼び出し
■ 関数の定義
■ 関数呼び出し
11
func div(n int, m int) (int, int) {
return n / m, n % m
}
戻り値n, m int
とも書ける
多値が返せる
q, r := div(5, 3)
多値を受け取る
型は後ろに書く!
14. 分岐:switch
■ caseに式が書ける
■ breakは書かなくてよい
14
switch a {
case 1:
fmt.Println("a is 1")
default:
fmt.Println("default")
}
swtich {
case a == 1:
fmt.Println("a is 1")
}
caseをまたぐ際には、
fallthroughを使う
何もしないと
breakになる
15. ユーザ型の定義
type <型名> <型リテラル>|<既存の型>
15
// 組み込み型を別の型として定義
type Int int
// 他のパッケージを別の型として定義
type MyWriter io.Writer
// 型リテラルに名前をつける
type Person struct {
Name string
}
intとIntは別の型として扱われる
16. メソッド
type で定義した型はメソッドのレシーバにできる
16
type Hex int
func (h Hex) String() string {
return fmt.Sprintf("%x", int(h))
}
// 100をHex型として代入
var hex Hex = 100
// Stringメソッドを呼び出す
fmt.Println(hex.String())
Playgroundで動かす
55. 実際に作ってみたツール
■ Structタグを揃える
■ 汎用的なCMS
● 式の評価を使ったツール
● コンテンツの配信条件を式で書く
55
type User struct {
ID int64 `json:"id" datastore:"ID"`
Name int64 `json:"name" datastore:"Name"`
}
type User struct {
ID int64 `json:"id" datastore:"ID"`
Name int64 `json:"name" datastore:"Name"`
}