什麼是在Go語言中對大量相關常量進行分組的首選(或正確)方法?例如C#和C++都有這個enum
。用Go語言對常量進行分組
回答
const
?
const (
pi = 3.14
foo = 42
bar = "hello"
)
有兩種選擇,這取決於如何使用常量。
首先是要建立基於誠信一個新的類型,以及使用這種新型聲明你的常量,例如:
type MyFlag int
const (
Foo MyFlag = 1
Bar
)
Foo
和Bar
將有類型MyFlag
。如果你想從MyFlag
提取int值回來了,你需要一個類型coersion:
var i int = int(Bar)
如果這是不方便的,裸常量塊的使用newacct的建議:
const (
Foo = 1
Bar = 2
)
Foo
和Bar
是可以分配給int,float等的完美常量。
這在「常量」部分的Effective Go中涵蓋。另請參閱iota
關鍵字對C/C++等值的自動分配的討論。
這是不正確的,在你的第一個例子中,Bar是無類型的,如果賦值的右邊是空白的,它只會選擇Foo的類型,在這種情況下你可以使用iota。 –
@Evan更正了,謝謝,我在發佈答案之前測試了我的示例,但不知怎的,額外的任務彈出了那裏。 – lnmx
我不確定你是否打算這麼做,但現在它們具有相同的值和類型。 –
這取決於你想通過這個分組實現什麼。
const (
c0 = 123
c1 = 67.23
c2 = "string"
)
這只是增加了不錯的視覺塊程序員(編輯允許摺疊),但什麼都不做的編譯器(你不能指定塊的名稱):去允許與以下括號語法分組。
唯一依賴於此塊的是Go中的iota constant declaration(這對enums來說非常方便)。它允許您輕鬆創建自動增量(不僅僅是自動增量:鏈接上的更多內容)。
例如這樣的:
const (
c0 = 3 + 5 * iota
c1
c2
)
將創建常量c0 = 3
(3 + 5 * 0),c1 = 8
(3 + 5 * 1)和c2 = 13
(3 + 5×2)。
我最接近枚舉的方法是將常量聲明爲類型。至少你有一些類型安全性,這是枚舉類型的主要特性。
type PoiType string
const (
Camping PoiType = "Camping"
Eatery PoiType = "Eatery"
Viewpoint PoiType = "Viewpoint"
)
- 1. 對編程語言進行分類
- 2. Google Go語言中的異常處理
- 3. 使用變量進行語言翻譯
- 4. Go語言的副作用
- 5. 使用go語言與gitolite
- 6. 在Go語言中,如何將json解組爲對象數組?
- 7. 分叉Go編程語言允許不同的縮進樣式?
- 8. 對條件語句塊進行分組
- 9. 如何在go編程語言中爲數組分配內存?
- 10. 如何在Windows中運行Go語言?
- 11. 按語言(英語,日語等)對iPhone應用程序進行分類
- 12. 僅使用一組指定語言對項目運行分析
- 13. 如何在運行時檢查變量類型在Go語言
- 14. Go語言中的墳墓
- 15. 返回菜單語言GO
- 16. 跨語言共享常量
- 17. Go語言:運行「go run」時更改生成文件夾
- 18. 使用什麼語言編寫Go編程語言?
- 19. 使用AngularJS對對象進行分組
- 20. Go語言的應用領域
- 21. 使用build GO語言依賴關係
- 22. For循環使用Go編程語言
- 23. Google的Go語言是通過值還是引用來複制矢量分配?
- 24. 使用C語言對文本進行語音識別
- 25. 用C語言聲明常量
- 26. 如何用go語言重寫嵌套包中的變量?
- 27. 使用Go編程語言尋找命名捕獲組
- 28. 如何在Go中分配非常量大小的數組
- 29. 對Java類進行分組
- 30. 如何在JavaScript中對一些常用屬性進行分組?
可能這樣的塊有一個名字嗎? –
@Darius:no :-(反正這不是分組 –
如果你給所有的常量賦予相同的用戶自定義類型,你可以在某個意義上給出一個塊的名稱,有點像lnmx試圖在MyFlag中做的事情例如, –