Skip to content

Latest commit

 

History

History
77 lines (58 loc) · 2.22 KB

2.04.md

File metadata and controls

77 lines (58 loc) · 2.22 KB

2.4 varキーワード

短縮形宣言演算子についてコードブロック内でどのように使うか見てきました。では、より広いスコープでアクセスしたい変数がある場合はどうすればよいのでしょう?

package main

import (
	"fmt"
)

func main() {
	x := 42 + 7       /* xのスコープはここから以下 */
	y := "James Bond" /* yのスコープはここから以下 */
	fmt.Println(x)
	fmt.Println(y)
	x = 50
	fmt.Println(x)
}

変数の宣言前にアクセスすることはできません。スコープの外だからです。(以下のコードはコンパイルできません。)

package main

import (
	"fmt"
)

func main() {
	x := 42 + 7
	y := "James Bond"
	fmt.Println(x)
	fmt.Println(y)
	x = 50
	fmt.Println(x)
}

func foo() {
	fmt.Println(x)	/* xはスコープから外れている */
}

tmp/sandbox324213631/main.go:17: undefined: xといったエラーが出るでしょう。17行目でxにアクセスしようとしていますが、できないからです。

ときにはコードブロックのスコープよりも広い範囲の変数スコープが欲しいこともあるでしょう。varを使えばパッケージレベルのスコープを得られます。Goドキュメントのkeywordsを見てキーワードを確認してみましょう。

varキーワードは変数の作成のために使います。変数zを追加し、21を割り当てます。

package main

import (
	"fmt"
)

var z = 21

func main() {
	x := 42 + 7
	y := "James Bond"
	fmt.Println(x)
	fmt.Println(y)
	x = 50
	fmt.Println(x)
	fmt.Println(z) /* zはここでもスコープ内 */
}

func foo() {
	fmt.Println(z) /* zはパッケージ内ならどこでもスコープ内 */
}

良いコードのために: 変数宣言と値の割り当てのために、コードブロック内では常に短縮形宣言演算子を使うようにしましょう。もしパッケージレベルでのスコープが必要なときだけvarを使うと良いでしょう。

まとめ: パッケージレベルで変数を作成したい場合はvarを使います。このように使います。var greeting = "Hello there"