变量作用域

变量定义

  • if 和 for 声明变量作用域
  • if 和 for 这些控制结构,而在这些结构中声明的变量的作用域只在相应的代码块内。

一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。如果一个变量在函数体外声明,则被认为是全局变量,可以在整个包甚至外部包(被导出后)使用,不管你声明在哪个源文件里或在哪个源文件里调用该变量。可参考

GO语言变量作用域

变量定义

一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。如果一个变量在函数体外声明,则被认为是全局变量,可以在整个包甚至外部包(被导出后)使用,不管你声明在哪个源文件里或在哪个源文件里调用该变量。

if 和 for 声明变量作用域

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。在今后的学习中我们将会学习到像 if 和 for 这些控制结构,而在这些结构中声明的变量的作用域只在相应的代码块内。一般情况下,局部变量的作用域可以通过代码块(用大括号括起来的部分)判断。

看代码:

// 错误 menu_web_id 变量定义代码
	
	if menu_web_id, err := c.GetInt("MenuWebId", 0);err != nil || menu_web_id < 1 {
		c.JsonResult(enums.JRCodeFailed, "文章类型异常", "")
	}
	
	// 该处使用的 menu_web_id 是未定义的;if 代码块中声明定义变量作用域只在 if 语句中
	if m.MenuWeb, err = models.MenuWebOne(menu_web_id); err != nil {
		c.JsonResult(enums.JRCodeFailed, "文章类型异常", "")
	}

go function 作用域_go

// 正确 menu_web_id 变量定义代码
	
	menu_web_id, err := c.GetInt("MenuWebId", 0);
	if err != nil || menu_web_id < 1 {
		c.JsonResult(enums.JRCodeFailed, "文章类型异常", "")
	}
	if m.MenuWeb, err = models.MenuWebOne(menu_web_id); err != nil {
		c.JsonResult(enums.JRCodeFailed, "文章类型异常", "")
	}

纠其原因就是:

if 和 for 这些控制结构,而在这些结构中声明的变量的作用域只在相应的代码块内。

一般情况下,局部变量的作用域可以通过代码块(用大括号括起来的部分)判断。