関数のスコープの基本
CoddyのGOジャーニー「基礎」セクションの一部 — レッスン 58/109。
Goでは、関数の内部で宣言された変数はその関数内でのみアクセス可能です。これは関数スコープと呼ばれます。
ローカル変数を持つ関数を作成します:
func calculateTotal(price int, quantity int) int {
tax := 0.1 * float64(price * quantity) // ローカル変数
total := price * quantity + int(tax)
return total
}
func main() {
result := calculateTotal(10, 2)
fmt.Println("Total:", result)
// fmt.Println(tax) // エラー:taxはここではアクセスできません
}出力には戻り値のみが表示されます:
Total: 22変数 tax は calculateTotal 関数内のみに存在し、main からはアクセスできません。
チャレンジ
初心者このチャレンジでは、Goにおける関数のスコープの理解を練習します。スコープの問題がある簡単なプログラムを修正する必要があります。
プログラムにはグローバル変数 message と、それを変更しようとする関数があります。あなたのタスクは、関数がグローバル変数を正しく更新するようにコードを修正することです。
チートシート
関数内で宣言された変数は、その関数内からのみアクセス可能です(関数スコープ):
func calculateTotal(price int, quantity int) int {
tax := 0.1 * float64(price * quantity) // ローカル変数
total := price * quantity + int(tax)
return total
}
func main() {
result := calculateTotal(10, 2)
fmt.Println("Total:", result)
// fmt.Println(tax) // エラー: taxはここではアクセスできません
}ローカル変数はその関数内でのみ存在し、外部からアクセスすることはできません。
自分で試してみよう
package main
import "fmt"
// グローバル変数
var message string = "Hello from global scope"
func updateMessage() {
// これはグローバル変数を変更するのではなく、新しいローカル変数を作成します
message := "Hello from function scope"
fmt.Println("Inside function:", message)
}
func main() {
fmt.Println("Before function call:", message)
updateMessage()
// TODO: グローバルな message はまだ元の値のままです
// グローバル変数を変更するように updateMessage() 関数を修正してください
fmt.Println("After function call:", message)
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。