Go 官方文档在哪里解释了变量的范围? [关闭]

Posted

技术标签:

【中文标题】Go 官方文档在哪里解释了变量的范围? [关闭]【英文标题】:Where is explained the scope of variables in Go in official documentation? [closed] 【发布时间】:2022-01-23 20:00:06 【问题描述】:

我在go.dev 中找不到任何解释私有/全局变量和变量范围的地方。

作为一个相关问题,我正在努力尝试从_test.go 文件中导入变量。当然这不在那个文档中,但我认为与编译器有关?

【问题讨论】:

在Language Specification。 go.dev/ref/spec#Declarations_and_scope 这能回答你的问题吗? Understanding variable scope in Go 我在尝试从_test.go 文件中导入变量时遇到了困难。当然这不在那个文档中,但我认为与编译器有关? _test.go 文件会被 go 工具忽略,除非您正在运行测试。 【参考方案1】:

声明和范围在Language Specification的不同部分进行了详细说明,有关详细信息和全面概述,请参阅Understanding variable scope in Go。

正如您在 cmets 中提到的,您的问题是您无法从 _test.go 文件中导入变量。语言规范没有提到这一点,所以这是一个实现限制。

引用Command documentation: Compile packages and dependencies:

编译包时,build 会忽略以 '_test.go' 结尾的文件。

它们仅在您运行测试时使用。 Test packages:

'Go test' 重新编译每个包以及名称与文件模式“*_test.go”匹配的任何文件。这些附加文件可以包含测试函数、基准函数和示例函数。有关更多信息,请参见“go help testfunc”。每个列出的包都会导致执行单独的测试二进制文件。名称以“_”(包括“_test.go”)或“.”开头的文件被忽略。

声明后缀为“_test”的包的测试文件将被编译为单独的包,然后与主测试二进制文件链接并运行。

【讨论】:

感谢@icza,一如既往的出色帮助!

以上是关于Go 官方文档在哪里解释了变量的范围? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Java API 文档有啥用途?

我在哪里可以获得所有 iOS 元素的列表? [关闭]

Lexical Scoping是如何实现的? [关闭]

Effective Go(官方文档)笔记

参考:什么是变量范围,哪些变量可以从哪里访问,什么是“未定义变量”错误?

GO语言环境变量