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

Ral*_*lph 2 go

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

package services

const (
   Source = "local"
)
Run Code Online (Sandbox Code Playgroud)

我想让其他包无法访问,而无需将包导入我的其他模块.我该怎么办呢?

Pet*_*ter 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")
    }
}
Run Code Online (Sandbox Code Playgroud)