問題是什么:
我想從變數宣告一個常量。這是我想做的一個非常簡單的版本:
去游樂場
someVar := 1
const someConst = someVar // error: const initializer someVar is not a constant
fmt.Printf("%d %d", someVar, someConst)
我怎樣才能做someConst一個常數?這是不可能的嗎?
我為什么要這個?
someVar是一個全域變數。這很好,這可以改變。someConst是函式作用域。對于此功能的范圍,它不應更改。
在 DB 術語中:someConst是一個不可變的快照someVar
uj5u.com熱心網友回復:
你不能。Go 的常量必須是編譯時常量。
甲常數宣告結合識別符號的串列(常數的名稱)的串列中的值的常量運算式。
和
常量運算式可能只包含常量運算元并在編譯時計算。
someVar 在您的示例中是一個變數,它不符合“常量運算元”的條件。
如果包級變數在您的函式執行程序中可能發生變化,而您不想觀察這些變化,請制作該變數的本地副本,并使用本地副本。
另請注意,如果變數的值可能因(并發)goroutine 而改變,則必須同步訪問它(在進行復制時)(就像在其他 goroutine 中寫入一樣)。
例如:
var (
someVarMu sync.RWMutex
someVar = 1
)
func foo() {
someVarMu.RLock()
myVar := someVar
someVarMu.RUnlock()
// Use myVar
fmt.Println(myVar)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404480.html
標籤:
上一篇:如何在Go中將多行編組為XML?
下一篇:路由器條件運行
