是否可以在不同的文件范围内重用常量名称?

时间:2018-08-16 13:50:48

标签: go

在不同的文件中是否可以有两个具有相同名称的常量?

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已被重新声明。如何在文件范围内保留这些常量?

如果可以解决这些问题,我不介意为常量使用某种命名空间。

2 个答案:

答案 0 :(得分:3)

  

The Go Programming Language Specification

     

Packages

     

Go程序是通过将程序包链接在一起来构造的。一个包装在   turn是由一个或多个源文件构成的   声明属于该对象的常量,类型,变量和函数   包,并且可以在同一包的所有文件中访问。   这些元素可以导出并在另一个包中使用。

     

Source file organization

     

每个源文件都包含一个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

相关问题