【Go言語入門】2.変数・定数についてさくっと学ぶ

前回インストールから出力までしたので、今回は変数から関数までを公式からなぞってキャッチアップする。

前回の記事

開発環境はLinux Mint 19.1 Tessaです。

初期化

Goの明示的な変数宣言はvarとconstキーワードを使う。

なんかJavaScriptっぽい。

package main

import (
  "fmt"
)

var a int = 100

func main() {
  const b string = "name"
  fmt.Printf("%v %v", a, b)
}

// >>> 100 name

また、インタプリタ言語っぽく暗黙的代入も可能。

package main

import (
  "fmt"
)

var a int = 100

func main() {
  b := "name"
  fmt.Printf("%v %v", a, b)
}

// >>> 100 name

ここで変数aを暗黙的な書き方に変えてみると、syntax error: non-declaration statement outside function bodyというようなエラーが出る。

関数外ではキーワードで始まる宣言が必須になるようです。

constの場合はそもそもキーワード省略ができないので注意が必要です。

また公式によると、型のない定数の場合、その状況に依って必要な型を取るようで、例えばintは64-bitの整数を保持できるが、それでは足りないことがあるので、そういう場合にもconst活用しましょうとのことです。

複数宣言

他の言語同様、複数宣言。

package main

import (
  "fmt"
)

const a, b, c = 100, "str1", false

func main() {
  x, y, z := 200, "str2", true
  fmt.Println(a, b, c, x, y, z)
}

// >>> 100 str1 false 200 str2 true

ゼロ値

また、僕の触ってきた言語にはなかったのですが、Goには初期化時、初期値を与えずに宣言するとゼロ値が与えられる様な特質な機能が備わっています。

package main

import (
  "fmt"
)

func main() {
  var a int
  var b string
  var c bool
  var d complex64
  var e *int
  fmt.Println(a, b, c, d, e)
}

// >>> 0  false (0+0i) <nil>

今まで初期値なしではエラーやundefinedが返ってきていて、そこからデバッグすることもあったので、なんか違和感があります。

型変換

Goだと明示的な型変換が必要で、手順はPythonの経験があれば直感的かと思います。

といっても全く複雑ではなく、変数a<T>から型Uへの変換はU(a)というように書くだけです。

package main

import (
  "fmt"
)

func main() {
  var a float64 = 3.14
  b := int(a)
  fmt.Printf("a is of type %T, value is %v => b is of type %T, value is %v\n", a, a, b, b)
}

こちらを試してみてください。

型変換に伴って小数以下が切り取られているのが確認できるはずです。

さり気なく書いてますが、型のチェックは%Tでできます。

Goの基本型についてはこちらが簡潔です。

変数・定数だけでもGoならではの書き方や決まりごとがあるので出来る限り取りこぼしのないようにしていきたいですね。

Goプログラミング実践入門