【Go言語】簡単な変数定義

ソフトウェア

 

前回の投稿に引き続きGo言語入門をしていきます。

今回は、変数宣言についてまとめます。

 

前回、Go言語でHello worldした記事はこちら。

https://nori-life-log.com/【go言語】hello-worldしてみた

 

 

変数宣言

 

まずは一番オーソドックスな変数宣言です。

package main
import "fmt"

func main() {
    var i int = 1
    var f64 float64 = 1.2
    var s string = "test"
    var t bool = true
    var f bool = false
    fmt.Println(i, f64, s, t, f)
}

実行すると、

1 1.2 test true false

という結果が出力されます。

 

基本は、

var name type = value

という形式で、nameに変数名、typeに変数の型、valueに値が入ります。

 

変数宣言は、短縮して書くことができます。

func main() {
    var (
        i    int     = 1
        f64  float64 = 1.2
        s    string  = "test"
        t, f bool    = true, false
    )
    fmt.Println(i, f64, s, t, f)
}

 

先ほどはすべての宣言に「var」を書いていましたが、「var()」とすることで、カッコ内に宣言をまとめて記述することができます。

また、同じ型の変数は一度に宣言することができるので、bool型の変数「t」と「f」はカンマ区切りで同時に宣言することができます。

 

型推論

 

Go言語では、型を指定せずに変数を宣言することができます。

いわゆる、型推論というやつですね。例を示します。

func main() {
    i := 1
    f64 := 1.2
    s := "test"
    t, f := true, false
    fmt.Printf("%T, %T, %T, %T, %T\n", i, f64, s, t, f)
    fmt.Println(i, f64, s, t, f)
}

出力結果は、

int, float64, string, bool, bool
1 1.2 test true false

となります。

 

fmt.Printf("%T", hogehoge)

で、変数hogehogeの型名を出力してくれます。

 

「:=」での宣言はShort variable declarationsと呼び、shortshort varといった略し方をするようです。

 

この「:=」ですが、関数の外では使用できません。

逆に、型を指定すれば関数の外で変数の宣言ができます。(グローバル変数)

 

また、一度宣言した変数名を再度宣言しようとするとエラーになります。

package main
import "fmt"

var i int = 1
// s := "test" エラーになる

func main() {
    var i int = 1
    f64 := 1.2
    // f64 := 1.3 エラーになる
    fmt.Println(i, f64)
}

※グローバル変数の「i」とmain関数内の「i」はスコープが異なるためエラーになりません。

 

const

 

const宣言した変数は書き換えられない値となります。

package main
import "fmt"

const Pi = 3.14
func main() {
    // Pi = 3 エラーになる
    fmt.Println(Pi)
}

出力結果は、

3.14

となります。

 

const宣言した「Pi」は不変の値となるので、

Pi = 3

という命令はエラーとなります。

 

ちなみに、const宣言した変数が評価されるのは、命令が実行されるときです。

例えば、以下のようなコードの場合、

package main
import (
    "fmt"
    "math"
)

const (
    Pi     = 3.14
    MaxInt = math.MaxInt64 + 1
)

// var MaxInt64 int = math.MaxInt64 + 1 エラーになる

func main() {
    fmt.Println(Pi)
    fmt.Println(MaxInt - 1)
}

const宣言したMaxIntはGo言語が表現できる最大整数を1超えた値となっていますが、

評価される際には

fmt.Pringln(MaxInt - 1)

と-1されることでエラーになることなく出力されます。

 

逆に、const宣言せず、普通に

var MaxInt64 int = math.MaxInt64 + 1

とすると、宣言時に評価されるため、intの範囲を超えエラーになってしまいます。

 

まとめ

 

Go言語変数宣言についてまとめました。

PythonとC#を主に使っていた私としては両言語を足して2で割ったような言語仕様だなぁと感じております。

次回もGo言語についてまとめていきます。

 

以上!

コメント