在不同的文件中是否可以有两个具有相同名称的常量?
foo.go
const {
deviceId = 1 // I dont need this outside the file scope
}
type DeviceA struct {
.. some fields..
// I cannot make constant fields here
}
.. some methods ...
bar.go
const {
deviceId = 2 // I dont need this outside the file scope
}
type DeviceB struct {
.. some fields ..
// I cannot make constant fields here
}
.. some methods ...
如果我这样做,我会得到deviceId
已被重新声明。如何在文件范围内保留这些常量?
如果可以解决这些问题,我不介意为常量使用某种命名空间。
答案 0 :(得分:3)
The Go Programming Language Specification
Go程序是通过将程序包链接在一起来构造的。一个包装在 turn是由一个或多个源文件构成的 声明属于该对象的常量,类型,变量和函数 包,并且可以在同一包的所有文件中访问。 这些元素可以导出并在另一个包中使用。
每个源文件都包含一个package子句,该子句定义了要 所属的字段,然后可能是空的导入集 声明,声明要使用其内容的包, 然后是一组可能为空的函数,类型的声明, 变量和常量。
属于该软件包的[constants]可在同一软件包的所有文件中访问。
Go的基本编译单元是程序包。软件包中的源文件将合并以形成编译器的输入。
答案 1 :(得分:1)
要回答您的问题:在两个文件中,在同一个作用域中,两个包具有相同名称,两个相同的包是不可能的。
Go中没有名称空间或文件范围。
但是,可能在同一个包中有两个同名但在不同范围声明的常量:
package main
import (
"fmt"
)
const a = 1
func main() {
const a = 2
fmt.Println(a) // output is 2
}
有关范围的详细信息,请参见:https://golang.org/ref/spec#Declarations_and_scope