先日、変数の宣言と初期化を一緒に行うには「var 変数 = 値」という書き方をする、てなことを書いた。
これ以外に、関数の中に限っては「変数 := 値」という書き方ができる。
package main import "fmt" func main() { name := "Andy" fmt.Println("Hello, " + name + "!") }
^o^ > go run var4.go Hello, Andy!
takatoh's blog – Learning programming languages.
先日、変数の宣言と初期化を一緒に行うには「var 変数 = 値」という書き方をする、てなことを書いた。
これ以外に、関数の中に限っては「変数 := 値」という書き方ができる。
package main import "fmt" func main() { name := "Andy" fmt.Println("Hello, " + name + "!") }
^o^ > go run var4.go Hello, Andy!
if 文はいたって普通。else if
は elsif
でも elif
でもなく else if
。
package main import "fmt" func isZero(n int) string { if n > 0 { return "More than zero." } else if n < 0 { return "Less than zero." } else { return "Just ZERO!" } } func main() { fmt.Println(isZero(3)) fmt.Println(isZero(-1)) fmt.Println(isZero(0)) }
^o^ > go run if.go More than zero. Less than zero. Just ZERO!
関数の定義には func
キーワードを使う。
func 関数名(引数 型...) 返り値の型 { 処理 }
引数、返り値とも型を後に書く。珍しいな。
値を返すには return
を使う。
試してみよう。
package main import "fmt" func hello(name string) string { return "Hello, " + name + "!" } func main() { fmt.Println(hello("Andy")) }
^o^ > go run func.go Hello, Andy!
Go にはたくさんの数値型がある。
型 | 説明 |
int8 | 8bit整数 |
int16 | 16bit整数 |
int32 | 32bit整数 |
int64 | 64bit整数 |
int | 32bitまたは64bit整数(処理系依存) |
uint8 | 8bit符号なし整数 |
byte | uint8の別名 |
uint16 | 16bit符号なし整数 |
uint32 | 32bit符号なし整数 |
uint64 | 64bit符号なし整数 |
uint | 32bitまたは64bit符号なし整数(処理系依存) |
float32 | 32bit単精度浮動小数点数 |
float64 | 64bit倍精度浮動小数点数 |
complex64 | float32の実数部と虚数部をもつ複素数 |
complex126 | float64の実数部と虚数部をもつ複素数 |
整数は通常10進数だけど、頭に 0 をつけると8進数、0x をつけると16進数と解釈される。
型が異なると計算できない。例えば同じ整数でも int と int64 の計算をしようとすると、次のようにエラーになる。
package main import "fmt" func main() { var a int var b int64 a = 10 b = 20 fmt.Println(a + b) }
^o^ > go run numbers.go # command-line-arguments .\numbers.go:12: invalid operation: a + b (mismatched types int and int64)
こういう場合は明示的に変換しなければならない。
package main import "fmt" func main() { var a int var b int64 a = 10 b = 20 fmt.Println(int64(a) + b) }
^o^ > go run numbers2.go 30
変数を使うには宣言をする必要がある。変数の宣言は var 変数名 型 という形で行う。
var a int
宣言と同時に初期化もできる。この場合には型を省略できる。
var a = 10
初期化しないとゼロ値に初期化される。ゼロ値とは、数値型では 0、文字列型では空文字列、bool型では false のこと。
package main import "fmt" func main() { var a int var b string var c bool fmt.Println(a) fmt.Println(b) fmt.Println(c) }
^o^ > go run var3.go 0 false
コマンドライン引数は C のように main
関数の引数で受け取るのではなく、os
パッケージの os.Args
関数を使う。
package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) }
^o^ > go build args.go ^o^ > args foo bar baz [args foo bar baz]
os.Args
の返り値は文字列の配列。最初の要素は実行ファイル名、これは C と同じだな。
使用するライブラリ(パッケージ)の読み込みは import 文で行う。
import "fmt"
読み込むパッケージが複数の場合、import 文を並べて書いてもいいけど、下のようにカッコで囲んで一つにしてもいい。
import ( "fmt" "os" )
こっちのほうが、読みやすいな。
Go のソースコードは UTF-8 で書くと決まっている。UTF-8 で書いてあれば、日本語も問題なく使える。たとえ Windows でも。
package main import "fmt" func main() { fmt.Println("こんにちは!") }
^o^ > go run hello_ja_utf8.go こんにちは!
UTF-8 以外の文字コード、例えば Shift JIS で書くと次のようにエラーになる。
^o^ > go run hello_ja_sjis.go # command-line-arguments .\hello_ja_sjis.go:6: invalid UTF-8 encoding
気が付けば今月も20日を過ぎている。まずいな。
まあ、いい。日にちが開いてしまってけど、ちょっとずつ Go をやっていこう。
今日は定番の Hello, world プログラムを作った。
package main import "fmt" func main() { fmt.Println("Hello, world!") }
Go のプログラムはパッケージから構成される。package
文で宣言する。ここでは main
という名前でパッケージを作っている。
Go のプログラムは main
パッケージの main
関数がエントリポイントになる。だからプログラムのパッケージ名は main
で、main
という名前の関数がなければいけない。
関数の定義は func 関数名
で行う。上の例では main
関数だけがある。
import
文は、ライブラリの読み込み。ライブラリ(パッケージ)名をクォートでくくって指定する。ここでは出力のために fmt
パッケージを読み込んでいる。
そして、fmt.Println
関数が標準出力への出力。引数の文字列に改行をつけて出力する。
じゃあ、実行してみよう。
^o^ > go run hello.go Hello, world!
今日はここまで。
気が付けば夏休みも最終日だ。このままでは今月ブログの更新なしになってしまうところだ。
大したネタもないので、Go 言語のインストールのことでも書いておこう。ダウンロードはここから。
Windows 用には msi インストーラがあるので、それをダウンロードして実行するだけ。すごく簡単。