首页 > 后端开发 > Golang > 正文

当存在同名局部变量时,如何访问 Go 中的顶级常量或变量?

DDD
发布: 2024-11-15 19:40:03
原创
702 人浏览过

How do I access a top-level constant or variable in Go when a local variable with the same name exists?

引用函数作用域内的常量或包级变量

在 Go 中,可以声明具有不同作用域的变量:本地(函数作用域)和顶级(包或文件范围)。有时,您可能会遇到这样的情况:您想要引用函数作用域内的顶级常量或变量,其中存在同名的局部变量。

请考虑以下代码片段:

package main

import "fmt"

const name = "Yosua"
// or var name string = "James"

func main() {
    name := "Jobs"
    fmt.Println(name)
}
登录后复制

问题:如何引用常量名称而不是本地变量?

答案:

在存在同名局部变量的情况下访问封闭范围变量是不可能的。当局部变量在作用域内时,它会遮蔽函数内的外部变量,使其无法访问。

Go 语言规范规定:

An identifier declared in a block may be redeclared in an inner block. While the identifier of the inner declaration is in scope, it denotes the entity declared by the inner declaration.
登录后复制

替代方案:

如果您需要同时访问顶级变量和局部变量,请考虑使用不同的名称。但是,如果这不可行,您可以采用以下替代方法:

  1. 临时分配给新变量:

    • 存储分配给局部变量之前临时变量中顶级变量的值变量。
    • 例如:

      cname := name
      name := "Jobs"
      fmt.Println(name)
      fmt.Println(cname)
      登录后复制
  2. 间接公开顶级变量:

    • 创建返回顶层的函数或方法变量的值。
    • 例如:

      func getName() string {
       return name
      }
      
      name := "Jobs"
      fmt.Println(name)
      fmt.Println(getName())
      登录后复制

以上是当存在同名局部变量时,如何访问 Go 中的顶级常量或变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板