初めてのgolang
株式会社トップゲート@sinmetal
agenda
- 自己紹介
- golangって?
- golangで動いているもの
- golangの動かし方
- golangの開発環境
- golangの文法とか
- 情報源
自己紹介
株式会社トップゲート GAEマイスター
Java, GAE, slim3
golangって?
-
オープンソース
-
主な舵取りはgoogle
-
2009年11月10日(米国時間) googleより発表
-
現在のVersionはgo1.2.
-
目指している所は早さ。実行速度もコンパイル速度も。
- タイプセーフ
- メモリセーフ
-
並列処理の記述が容易
gopher
golangで動いているもの
golangの動かし方
golangの開発環境
-
emacs : EmacsでのGo言語編集環境
-
vim : Vimを使ったGo言語開発手法
- Sublime Text : GoSublime
-
eclipse : GoのIDE『GoClipse』を使う
- IntelliJ : MacとIntelliJでGo言語環境を作る
Hello World
package main
import "fmt"
func main() {
var m1 string = "Hello world!" // 変数は 変数名 型の順番で宣言
m2 := "Hello Go!" // := で型推論
fmt.Println(m1)
fmt.Println(m2)
}
セミコロン
基本的には要らない
キーワード (1)
- break : for, switch, select から抜ける
- case : switch, select のcase
- chan : チャネル
- const : 定数
- continue : for文で次の繰り返しを開始する
- default : switch, selectのdefault
- defer : 関数を遅延実行
- else : if の分岐
- fallthrough : switch, select, caseで次のcaseを続けて実行
- for : ループ
- func : 関数
- go : 関数をgoroutineとして実行
- goto : ラベルにジャンプ
- if : 条件分岐
- import : 他のpackageの利用を宣言
キーワード (2)
- interface : インタフェース
- map : マップ
- package : ソースファイルが所属するpackage
- range : forで配列などから値を順番に取得する
- return : 関数から呼び出し元に戻る
- select : チャネル送受信による分岐
- struct : 構造体
- switch : 条件分岐
- type : 型
- var : 変数
繰り返しはforしか無い
package main
import "fmt"
func main() {
for i := 1; i <= 151; i++ {
fmt.Println(i, "番目のポケモン!")
}
}
Classは無い
extendsも無い
typeにメソッドを持たせる
type Favorite struct {
Id string `json:"id" datastore:"-"`
PokemonName string `json:"pokemonName"`
Created time.Time `json:"created"`
}
func (f *Favorite) save(c appengine.Context) (*Favorite, error) {
f.Created = time.Now()
k, err := datastore.Put(c, f.key(c), f)
if err != nil {
return nil, err
}
f.Id = k.StringID()
return f, nil
}
packageを作る
package pokemon
...
type pokemon struct {
Id int64 `json:"id"`
Name string `json:"name"`
}
func GetHeroes() { // 先頭大文字がpublic
pokemons := [3]Pokemon{}
pokemons[0] = Pokemon{Id: 1, Name: "フシギダネ"}
pokemons[1] = Pokemon{Id: 2, Name: "ゼニガメ"}
pokemons[2] = Pokemon{Id: 3, Name: "ヒトカゲ"}
return pokemons, nil
}
Exceptionは無い
Errorは戻り値として返す
複数戻り値可能
func (f *Favorite) save(c appengine.Context) (*Favorite, error) {
f.Created = time.Now()
k, err := datastore.Put(c, f.key(c), f) // Key, Errorが返ってくる
if err != nil {
return nil, err
}
f.Id = k.StringID()
return f, nil
}
panic
package main
func main() {
panic("ヤドランが突破できない")
}
recover
package main
import "fmt"
func main() {
defer func() {
if err := recover(); err != nil {
fmt.Println("リカバリ:", err)
}
}()
panic("パニック!")
}
基本型 (1)
- bool
- string
- uint8
- byte
- uint16
- uint32
- uint64
基本型 (2)
-
int8
- int16
- int32
- rune : int32のalias。Unicoe文字1文字を格納する型。文字のことをルーンと呼ぶ。
- int64
- float32
- float64
- complex64 : 複素数
- complex128 : 複素数
- uint : サイズはシステム環境に依存。32bit or 64bit
- int : サイズはシステム環境に依存。32bit or 64bit
- uintptr : ポインタの値を格納するための符号なし整数。
情報源
- Go言語が初心者が見ると幸せになれる場所
-
Big Sky
- Go研
- Golang Cafe
- Go Advent Calendar 2013
- #golangjp (Twitter hashtag)
- @golangjp (Twitter account)
- Golang JP (Google+)
- Go言語 (Linger)
初めてのgolang
By sinmetal
初めてのgolang
- 6,947