变量覆盖(shadows declaration)

package main

import "fmt"

func main() {
   i := 512 // 声明变量i

   fmt.Println(&i) // 0xc00009c010

   if true {
      fmt.Println(i) // 512

      // 重要说明:这里第二次声明变量i,将会发生变量覆盖
      i := 1024 // Declaration of 'i' shadows declaration

      // 重要说明:可以看到下面的&i和上面的&i是不同的,即两个i并不是同一个变量
      fmt.Println(&i) // 0xc00009c030

      fmt.Println(i) // 1024
   }

   fmt.Println(i) // 512
}

// ========== 总结 ========== //
// 1、变量覆盖就是在代码块内外两次声明同一个变量,虽然变量名相同,但实际上它们并不是同一个变量。
// 1、变量覆盖有时会让debug变得非常麻烦,所以写代码时应该尽量避免出现变量覆盖。
// 2、避免出现变量覆盖最简单的方法是将变量声明全部放在函数开头,后面只使用变量,不再声明变量。

Copyright © 2024 码农人生. All Rights Reserved