一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。如果一个变量在函数体外声明,则被认为是全局变量,可以在整个包甚至外部包(被导出后)使用,不管你声明在哪个源文件里或在哪个源文件里调用该变量。可参考 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, "文章类型异常", "")
}
// 正确 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 这些控制结构,而在这些结构中声明的变量的作用域只在相应的代码块内。
一般情况下,局部变量的作用域可以通过代码块(用大括号括起来的部分)判断。