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 | “” |
bool | false |
error | nil |
ゼロ値があると以下のように書くことができる。
package main
import (
"fmt"
)
func main() {
sum := 0
// ゼロ値を使って var sum int のようにも書ける
for i := 1; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
}
定数
定数式
定数のみからなる演算式で、コンパイル時に計算される。
種類 | 例 | 演算結果 |
四則演算 | 100 + 200 | 300 |
シフト演算 | 1 << 2 | 4 |
文字列結合 | “Hello, ” + “世界” | “Hello, 世界” |
関係演算 / 論理演算 | !(10 == 20) | true |
名前付き定数
定数に名前をつけて定義する。変数と同様に定数に名前をつけることができる。
// 型のある定数
const n int = 100
// 型のない定数
const m = 100
// 定数式の使用
const s = "Hello, " + "世界"
// まとめて定義も可能
const (
x = 100
y = 200
)
定数の型
型を明示しない場合に定数は型を持たず、デフォルトの型を持つ。
種類 | 例 | デフォルトの型 |
整数 | 100 | int |
浮動小数点 | 1.5 | float64 |
文字列 | “hoge” | string |
真偽値 | true | bool |
問題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")
}
}