go语言变量的作用域是什么

发布时间:2023-02-06 11:25:56 作者:iii
来源:亿速云 阅读:137

这篇“go语言变量的作用域是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言变量的作用域是什么”文章吧。

go语言变量有2种作用域:1、局部变量,是在函数级别和块级别内声明的变量;局部变量只能在它们的块或函数中访问,已经声明的局部变量不能在同一块或函数中重新声明。2、全局变量,是在包级别声明的变量;全局变量在程序的整个生命周期中都可用,不能使用“:=”运算符声明全局变量。

变量声明的位置

Go语言变量声明的位置有三种级别:

变量位置示例

package main

import "fmt"

var test = "test"  //在函数外,包级别变量

func main() {
    a, b := 1, 2  //a和b,c在main函数内定义,函数级别变量
    c := sum(a, b)
    fmt.Println(c)
    fmt.Println(test)

    for i := 0; i < 10; i++ {   //i为for循环内定义,为隐式块级别变量
        var d = i + 1    //d在for的循环体内,以大括号{}括起来,为显式块级别变量
        fmt.Println(d)
    }

}

func sum(a, b int) int {   //函数参数a和b,在函数内定义,为函数级别变量
    fmt.Println(a)
    fmt.Println(b)
    nu := a + b
    return nu
}

变量作用域

变量声明的位置决定了变量允许在什么地方被访问以及变量的声明周期。变量的可访问范围称为变量的作用域。Go语言中,变量的作用域分为两类:

局部变量

在函数级别和块级别内声明的变量为局部变量。局部变量有以下特征:

示例:

package main

import "fmt"

func main() {
    var a= "astrng"
    fmt.Println(a)
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    fmt.Println(i)
}

func testLocal() {
    fmt.Println(a)
}

这个代码编译时会报错:

undefined: i
undefined: a

原因:

i:为for循环体内的块级别的局部变量,在定义它的for循环体外访问,就会报undefined。

a:为main函数级别的局部变量,在testLocal函数内无法访问,会报undefined错误。

全局变量

在包级别声明的变量为全局变量。全局变量有以下特征:

package main

import "fmt"

var a = "astring"

func main() {
    testGlobal()
}

func testGlobal() {
    fmt.Println(a)  //运行结果是,正确打印出a的值“astring”
}

局部变量和全局变量同名

Go语言程序中全局变量与局部变量名称可以相同,但是函数体内的局部变量会被优先考虑。

package main
import "fmt"
//声明全局变量
var a float32 = 3.14
func main() {
    //声明局部变量
    var a int = 3
    fmt.Printf("a = %d\n", a)
}

运行结果如下所示:

a = 3

Go语言是运行局部变量和全局变量同名,同名的变量在局部作用域范围,它将遮蔽外部作用域中的变量。

package main

import "fmt"

var a = "globala"

func main() {
    var a = "locala"
    fmt.Println(a)  //此处的a会遮蔽外面定义的a全局变量,输出locala
}
func testGlobal() {
  fmt.Println(a)  //此处是全局变量a,输出globala
}

go语言变量的作用域是什么

以上就是关于“go语言变量的作用域是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读:
  1. Go中变量的作用域
  2. 变量的作用域是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

go语言

上一篇:go语言扩容方法有哪些

下一篇:go语言中list如何删除元素

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》