LoginSignup
33

More than 5 years have passed since last update.

Go入門 vol.2 〜Go言語の基本文法(main パッケージ、インポート、組込み型、変数)〜

Posted at

はじめに

Go 言語に入門します。第 2 回目になります。
ひたすら写経です。

教材などについての説明は、
下記リンクの中の Go 入門の第一回目をご参照くださいね。

Go入門リンク

学習内容

今回は、

Go言語の基本文法(main パッケージ、インポート、組込み型、変数)

について、簡単にまとめていきたいと思います。

Go言語の基本文法

hello world のプログラムを元に基本文法を学びます。

hello.go
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 であると推論されます。

定数

変数宣言の varconst に変えると定数になります。
定数宣言できる型は、組込み型のうち 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 などに相当します。

以上、おわり。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33