Go

【Go言語】変数、定数について

GopherでGo言語を勉強しはじめたので勉強したことをアウトプットしていきたいと思います。

変数

変数の定義

基本的な変数の定義は以下でできる。

// 宣言後、代入
var n int
n = 100

// 宣言と代入を同時に行う
var n int = 100

// 宣言と代入を同時に行う(型推論)
var n = 100

// varを省略 (関数内のみでしかできない)
n := 100

// まとめて定義も可能
var (
  n = 100
  m = 200
)

変数のゼロ値

Goの変数はゼロ値という値が設定され、明示的な初期化をしなくても使える。

ゼロ値
intやfloat64などの数値0
string“”
boolfalse
errornil

ゼロ値があると以下のように書くことができる。

package main

import (
	"fmt"
)

func main() {
	sum := 0
  // ゼロ値を使って var sum int のようにも書ける
	for i := 1; i <= 10; i++ {
		sum += i
	}
	fmt.Println(sum)
}

定数

定数式

定数のみからなる演算式で、コンパイル時に計算される。

種類演算結果
四則演算100 + 200300
シフト演算1 << 24
文字列結合“Hello, ” + “世界”“Hello, 世界”
関係演算 / 論理演算!(10 == 20)true

名前付き定数

定数に名前をつけて定義する。変数と同様に定数に名前をつけることができる。

// 型のある定数
const n int = 100

// 型のない定数
const m = 100

// 定数式の使用
const s = "Hello, " + "世界"

// まとめて定義も可能
const (
  x = 100
  y = 200
)

定数の型

型を明示しない場合に定数は型を持たず、デフォルトの型を持つ。

種類デフォルトの型
整数100int
浮動小数点1.5float64
文字列“hoge”string
真偽値truebool

問題1

下の文はコンパイルエラーになるのはなぜなのかというのを考えてみる。

package main

func main() {
	var sum int
	sum = 5 + 6 + 3
	avg := sum / 3
	if avg > 4.5 {
	  println("good")
	}
}

変数sumはint型で定義しており、4行目でsum = 14となる。5行目で変数avgを定義しているが、sumがint型なので、avgもint型で定義される。よって、7行目でint型とfloat型を比較しているのでコンパイルエラーとなる。正しくは以下のようにキャストする。

package main

func main() {
	var sum int
	sum = 5 + 6 + 3
	avg := float64(sum) / 3
	if avg > 4.5 {
	  println("good")
	}
}

参考

https://gopherdojo.org/

ABOUT ME
sakai
東京在住の30歳。元々は車部品メーカーで働いていてましたが、プログラミングに興味を持ちスクールに通ってエンジニアになりました。 そこからベンチャー → メガベンチャー → 個人事業主になりました。 最近は生成 AI 関連の業務を中心にやっています。 ヒカルチャンネル(Youtube)とワンピースが大好きです!