はじめに
Go 言語に入門します。第 2 回目になります。
ひたすら写経です。
教材などについての説明は、
下記リンクの中の Go 入門の第一回目をご参照くださいね。
Go入門リンク
学習内容
今回は、
Go言語の基本文法(main パッケージ、インポート、組込み型、変数)
について、簡単にまとめていきたいと思います。
Go言語の基本文法
hello world のプログラムを元に基本文法を学びます。
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
main パッケージ
Go のコードは、パッケージの宣言から始まります。
package main
プログラムをコンパイルして実行すると、
まず main パッケージの中にある main()関数が実行されます。
func main() {
}
インポート
import は、プログラム内にほかのパッケージを取り込むために使用します。
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
インポートしたパッケージ内へは、パッケージ名にドットをつけてアクセスできます。
上記の例では、fmt パッケージの Println() を使用して出力しています。
どうでもいい私の話ですが、
最初 import のカッコを()
ではなく{}
で書いて怒られました・・・(恥)
複数パッケージの取り込み
複数パッケージを取り込む場合は、並べて記述します。
import (
"fmt"
"github.com/meguma/gosample"
"strings"
)
オプションの指定
インポートするパッケージ名の前には、いくつかのオプションが指定できます。
package main
import (
// プログラム内でのパッケージ名を変更できる
f "fmt"
// 使用しないインポートパッケージをコンパイラに伝える(書かないとコンパイルエラー)
_ "github.com/meguma/gosample"
// 使用時にパッケージ名を省略できる
. "strings"
)
func main() {
// fmt.Println()がf.Println()になり
// strings.ToUpper()がToUpper()になっている
f.Println(ToUpper("hello world"))
}
組込み型
色々あるので、公式などを参考にされたし。
変数
変数宣言は、var 変数名 型
の順番で行います。
下記の例では、
hello world プログラムの出力メッセージを、
message という string の変数に代入しています。
var message string = "hello world"
func main() {
fmt.Println(message)
}
一度に複数の宣言と初期化
一度に複数の宣言する場合は、こんな風にも記述できます。
var foo, bar, buz string = "foo", "bar", "buz"
2つ目以降の型を省略する、といった次ような書き方もできます。
var (
a string = "aaa"
b = "bbb"
c = "ccc"
)
関数内部での宣言と初期化
変数宣言と初期化を関数の内部で行う場合は、
var と型宣言を省略し、 :=
という記号を用いることができます。
func main() {
// どちらの書き方も同じ意味
// var message string = "hello world"
message := "hello world"
fmt.Println(message)
}
この書き方の場合、変数の型は代入する値からコンパイラによって推論されます。
今回は文字列を代入していることから、変数 message の型が string であると推論されます。
定数
変数宣言の var
を const
に変えると定数になります。
定数宣言できる型は、組込み型のうち error 以外の型です。
func main() {
const Hello string = "hello"
Hello = "bye" // cannot assign to Hello
}
上記のような、定数に対する再代入はコンパイルエラーになります。
(ちなみに、IntelliJ IDE の go plugin は何も言ってこなかった・・・。)
ゼロ値
変数を宣言し、明示的に値を初期化しなかった場合、
変数はゼロ値というデフォルト値で初期化されます。
ゼロ値は型ごとに決まっていて、
例えば int のゼロ値は 0 であるため、次のコードは 0 を出力します。
func main() {
var i int // i はゼロ値で初期化
fmt.Println(i) // 0
}
型ごとのゼロ値は次のようになります。
型 | ゼロ値 |
---|---|
整数型 | 0 |
浮動小数点型 | 0.0 |
bool | false |
string | "" |
配列 | 各要素がゼロ値の配列 |
構造体 | 各フィールドがゼロ値の構造体 |
そのほかの型 | nil |
nil は値がないことを示す値です。
ほかの言語における null などに相当します。
以上、おわり。