「Go/変数」の版間の差分
削除された内容 追加された内容
M {{Nav}} タグ: 2017年版ソースエディター |
→宣言とゼロ値: 宣言とゼロ値を型推定の前に説明 タグ: 2017年版ソースエディター |
||
13 行
</syntaxhighlight>
====
Goでは、変数を使うには宣言
;[https://
package main
21 行
func main() {
var n
fmt.Printf("var n
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
var n
</syntaxhighlight>
;解説:<syntaxhighlight lang="go" start=6 line>
var n
</syntaxhighlight>
明示的に型を伴って宣言していませんが、初期値の 5 から int が型推定されます。▼
▲;fmt.Printf:<syntaxhighlight lang="go" start=7 line>
▲ fmt.Printf("var n = 5 => 値:%v 型:%T\n", n, n)
</syntaxhighlight>
: fmt.Printf はC言語のprintf関数に影響を受けた fmt パッケージ
: ここで使わえれている書式は %v と %T の2つの動詞で、%v は引数の値を引数の値にあった型で表示します。%T は引数の型を表示します。
; ゼロ値
: 大事なのは値が 0 であることで、これは未定義な値がたまたま 0 だったのではなく言語仕様に従った結果だということです。
: このようにある型が初期化を行われなかったときの初期値とされる値をゼロ値(''Zero value'')と呼びます。
;[https://play.golang.org/p/VaVkt372_Yv 様々な型なゼロ値]:<syntaxhighlight lang="go" line>
package main
import "fmt"
=== 初期化を伴わない例 ===▼
;[https://paiza.io/projects/kl8iW9-vUfuAVWaOMxl8cg?language=go コード例]:<syntaxhighlight lang="go" highlight=6 line>▼
func main() {
var i int // 整数型
fmt.Printf("var i int => 値:%v 型:%T\n", i, i)
var f float64 // 浮動小数点数型
fmt.Printf("var f float64 => 値:%v 型:%T\n", f, f)
var b bool // 真理値型
fmt.Printf("var b bool => 値:%v 型:%T\n", b, b)
var s string // 文字列型
fmt.Printf("var s string => 値:%v 型:%T\n", s, s)
var a [5]int // 5要素の整数配列型
fmt.Printf("var a [5]int => 値:%v 型:%T\n", a, a)
var e []int // 整数スライス型
fmt.Printf("var e []int => 値:%v 型:%T\n", e, e)
var r rune // Rune型(int32型のalias)
fmt.Printf("var r rune => 値:%v 型:%T\n", r, r)
var t struct { // 文字列型のフィールド Name と int型のフィールド Age を持つ無名の構造体
Name string
Age int
}
fmt.Printf("var struct { Name string; Age int } => 値:%v 型:%T\n", t, t)
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
var i int => 値:0 型:int
var f float64 => 値:0 型:float64
var b bool => 値:false 型:bool
var s string => 値: 型:string
var a [5]int => 値:[0 0 0 0 0] 型:[5]int
var e []int => 値:[] 型:[]int
var r rune => 値:0 型:int32
var struct { Name string; Age int } => 値:{ 0} 型:struct { Name string; Age int }
</syntaxhighlight>
: 型の説明の前なので、多くの型とその書式は初見かもしれませんが、数値は 0 、文字烈は ""、複合型は要素ごとに再帰的にゼロ値が与えられます。
Goでは、変数宣言の初期値から宣言される変数の型を推論します。
▲;[https://
package main
47 ⟶ 94行目:
func main() {
var n
fmt.Printf("var n
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
var n
</syntaxhighlight>
;解説:<syntaxhighlight lang="go" start=6 line>
var n
</syntaxhighlight>
▲明示的に型を伴って宣言していませんが、初期値の 5 から int が型推定されます。
;fmt.Printf:<syntaxhighlight lang="go" start=7 line>
fmt.Printf("var n = 5 => 値:%v 型:%T\n", n, n)
</syntaxhighlight>
▲で int 型の変数 <var>n</var> を初期値なしで宣言しています。
=== 短い変数宣言 ===
|