#contents ** Go言語とはなにか? [#z670fa75] - 概要 -- Google -- シンプルな言語仕様 -- 高速 -- 並行プログラミング - 公式サイト -- https://golang.org/ - 知識 -- Unixコマンド -- C言語 - 環境 -- CentOS7 (Vagrant) -- sudo yum install golang - Goインストール $ pwd /home/vagrant/golang_lessons $ sudo yum -y install golang $ go version go version go1.6.3 linux/amd64 ** はじめてのGoプログラム [#nf2aaa6a] - hello.go package main import "fmt" func main() { fmt.Println("hello world") } - コンパイル $ go build hello.go $ ls hello hello.go - 実行 $ ./hello hello world - コンパイル&実行 $ go run hello.go hello world - 言語の特徴 -- 1行コメントは「//」複数行コメントは「/* */」 -- 文末に「;」は不要 -- インデントはスペースではなくタブ推奨 ** 変数を使ってみよう [#e456795e] - 基本形 func main() { var msg string msg = "hello world" fmt.Println(msg) } - 変数宣言と同時に値代入 &color(red){※}; 型 (string) は省略可能 func main() { var msg = "hello world" fmt.Println(msg) } - 変数宣言と同時に値代入 &color(red){※}; := を利用した記法 func main() { msg := "hello world" fmt.Println(msg) } - 実行結果 $ go run hello.go hello world - 複数変数を同時に宣言 func main() { // var a, b int // a, b = 10, 15 a, b := 10, 15 } - 型が異なる変数を同時に宣言 func main() { var ( c int d string ) c = 20 d = "hoge" } - 変数名の規則 -- 1文字目が小文字: そのパッケージ内からのみアクセス可 -- 1文字目が大文字: 他のパッケージからもアクセス可 -- 変数、定数、関数についても同じルール ** 基本データ型を使ってみよう [#mc17811c] - 文字列: string -- "hello" -- 初期値: 空文字 "" &color(red){※}; nil では無い - 整数: int -- 53 -- 初期値: 0 - 浮動小数: float64 -- 10.2 - 真偽値: bool -- false / true -- 初期値: false - nil - printf の使い方 package main import "fmt" func main() { a := 10 b := 12.3 c := "hoge" var d bool fmt.Printf("a:%d, b:%f, c:%s, d:%t\n", a, b, c, d) } - 実行結果 $ go run hello.go a:10, b:12.300000, c:hoge, d:false ** 定数を使ってみよう [#y563475c] - 定数 -- const で宣言 -- 値の変更不可 - hello.go package main import "fmt" func main() { const name = "taguchi" name = "fkoji" fmt.Println(name) } - 実行結果 $ go run hello.go # command-line-arguments ./hello.go:7: cannot assign to name - iota を使った定数宣言 &color(red){※}; 自動で連番の値を付与 package main import "fmt" func main() { const ( sun = iota // 0 mon // 1 tue // 2 ) fmt.Println(sun, mon, tue) } - 実行結果 $ go run hello.go 0 1 2