Go - 範圍規則:理解變量可見性

Hello, 有志於成為程序員的你!今天,我們將踏上一段令人興奮的旅程,進入Go程式設計的世界,特別聚焦於範圍規則。別擔心你對程式設計還是新手——我會一步一步地引導你理解這個主題,就像我過去幾年來對許多學生所做的一樣。讓我們一起深入探討吧!

Go - Scope Rules

什麼是範圍?

在我們深入細節之前,讓我們先了解在程式設計中「範圍」意味著什麼。想像你在一個有很多房間的房子裡。每個房間代表你程式的不同部分。變量的範圍決定了你能在哪些房間(程式的哪些部分)看到和使用這個變量。是不是很興奮?

局部變量:你房間的秘密藏匿處

什麼是局部變量?

局部變量就像你放在房間裡的個人財物。它們只能在特定的函數或代碼塊內訪問。

示例 1:函數中的局部變量

package main

import "fmt"

func main() {
// 局部變量 'message'
message := "Hello, Go!"
fmt.Println(message)
}

在這個例子中,message 是一個局部變量。它就像你寫的一張紙條並放在你的房間(main 函數)裡。你可以在房間內閱讀它,但一旦走出房間,它就不見了!

示例 2:塊範圍

package main

import "fmt"

func main() {
if true {
// 局部變量 'secretCode'
secretCode := 1234
fmt.Println("秘密代碼是:", secretCode)
}
// 說明下一行會導致錯誤
// fmt.Println(secretCode)
}

在這裡,secretCode 就像藏在你房間抽屜裡的日記。它只能在特定的 "if" 塊內訪問。

全局變量:房子的對講機

什麼是全局變量?

全局變量就像你房子裡的對講機系統。它們可以被程式中的任何房間(函數)訪問。

示例 3:全局變量

package main

import "fmt"

// 全局變量
var globalMessage = "我到處都可以訪問!"

func main() {
fmt.Println(globalMessage)
changeMessage()
fmt.Println(globalMessage)
}

func changeMessage() {
globalMessage = "我已經被改變了!"
}

在這個例子中,globalMessage 就像在房子對講機上發布的公告。每個函數都能聽到它,甚至可以改變它!

形式參數:帶名牌的客人

什麼是形式參數?

形式參數就像你邀請到房間的客人,每個都帶著名牌。他們從外部帶來值,但在函數內被當作局部變量對待。

示例 4:函數參數

package main

import "fmt"

func greet(name string, age int) {
fmt.Printf("Hello, %s! 你今年 %d 歲。\n", name, age)
}

func main() {
greet("Alice", 25)
greet("Bob", 30)
}

在這裡,nameage 就像訪問你 greet 函數的客人(參數)。他們從外部帶來信息,但只在函數內知道。

初始化局部和全局變量:布置你的房子

局部變量初始化

Go 語言中的局部變量就像你帶進房間的物品。在使用之前,你需要給它們賦值(初始化它們)。

func localInit() {
var x int    // 已声明但未初始化
x = 10       // 初始化
y := 20      // 一行聲明並初始化
fmt.Println(x, y)
}

全局變量初始化

全局變量,就像你房子裡共享的物品,如果你不指定其他值,它們會被自動初始化為零值。

package main

import "fmt"

var (
globalInt    int
globalString string
globalBool   bool
)

func main() {
fmt.Println(globalInt, globalString, globalBool)
// 輸出: 0  false
}

範圍規則速查表

這裡有一個方便的表格,總結了我們學習的範圍規則:

變量類型 範圍 初始化 示例
局部變量 函數或塊 使用前必須初始化 x := 10
全局變量 整個包 自動初始化為零值 var globalX int
形式參數 函數 函數調用时初始化 func (x int)

結論:你的程式設計房子

理解Go語言中的範圍就像知道你的程式設計房子的佈局。局部變量是你的私人物品,全局變量是房子的對講機,參數就像你邀請進來的客人。通過掌握這些概念,你已經走上了成為一名熟練Go程序員的道路!

記住,熟能生巧。嘗試編寫一些小程式來探索這些概念。不要害怕犯錯誤——它們是通向精通的踏腳石。祝快樂編程,未來的Go專家!

Credits: Image by storyset