作用域==標識符
簡單來說,作用域指的是標識符可以起作用的范圍,即其可見范圍。將標識符的可見性限制在一定范圍內,這個范圍就是作用域。
把標識符約束在一定的可見范圍內,這個范圍就是作用域。
1. 宇宙塊
- 特點:預定義標識符,任何地方都可以使用。
- 是否需要加包名:不需要。
2. 包塊
- 類型:package塊,屬于全局作用域。
- 定義:在包內頂層代碼中定義的全局常量或全局變量。
- 對外可見性:
- 首字母大寫:包外可見。使用時通過 包名.標識符 訪問。包內也能直接使用,無需加包名。
- 首字母小寫:僅包內可見,使用時無需加包名。
3. 局部塊
- 定義在局部代碼塊中的變量,例如 if、switch、for 、select、case等語句內使用 := 定義的變量。
- 可見范圍:僅限于所在語句塊,無法在塊外訪問。
- 注意:局部變量的作用范圍比全局變量更小。即使全局變量在函數中定義,其作用范圍也比函數內的局部變量大。
func main() {switch a := 100; {case a > 0:fmt.Println(100, a)}// fmt.Println(a) //在switch 外部不能訪問到switch定義的變量 as := []int{1, 2, 3, 4}for i, v := range s {fmt.Println(i, v)}fmt.Println(i, v) //超出其作用域不可見if f, err := os.Open("o:/main.go"); err != nil {fmt.Println(f, err) // 變量在if 內部可見}fmt.Println(f, err) //錯誤,if 外部不可見。}