如何在golang的所有包中访问全局常量?

时间:2018-04-12 06:02:16

标签: go

我在golang中的包中定义了一个常量:

package services

const (
   Source = "local"
)

我想让其他包无法访问,而无需将包导入我的其他模块。我怎么能这样做呢?

1 个答案:

答案 0 :(得分:7)

您无法在不导入服务的情况下引用services.Source。

但是,您可以通过在另一个恰好具有相同值的包中创建新常量来避免依赖性,并通过测试进行验证。也就是说,您的测试导入服务,但您的生产代码没有。 stdlib在这里和那里执行此操作以避免一些依赖。

// services.go
package services

const Source = "local"

// foo.go
package foo

const Source = "local"

// foo_test.go
package foo

import (
    "services"
    "testing"
)

func TestSource(t *testing.T) {
    if Source != services.Source {
        t.Error("Source != services.Source")
    }
}