Use*_*645 1 variables constants go
问题是什么:
我想从变量声明一个常量。这是我想做的一个非常简单的版本:
someVar := 1
const someConst = someVar // error: const initializer someVar is not a constant
fmt.Printf("%d %d", someVar, someConst)
Run Code Online (Sandbox Code Playgroud)
我怎样才能使someConst一个常数?这在Go中是不可能的吗?
我为什么要这个?
someVar是一个全局变量。这可以改变,这很好。someConst是函数作用域。对于这个函数的范围来说,它不应该改变。
在数据库术语中:someConst是一个不可变的快照someVar
你不能。Go 的常量必须是编译时常量。
和
常量表达式只能包含常量操作数,并在编译时求值。
someVar在您的示例中是一个变量,它不符合“常量操作数”。
如果包级变量可能在函数执行期间发生变化,而您不想观察这种变化,请创建该变量的本地副本,并使用本地副本。
另请注意,如果变量的值可能由于(并发)goroutine 而发生变化,则必须同步对它的访问(在进行复制时)(就像在其他 goroutine 中对其进行写入一样)。
例如:
var (
someVarMu sync.RWMutex
someVar = 1
)
func foo() {
someVarMu.RLock()
myVar := someVar
someVarMu.RUnlock()
// Use myVar
fmt.Println(myVar)
}
Run Code Online (Sandbox Code Playgroud)