我有一個在golang中使用iota定義的以下類型。如何檢查golang中的iota類型值是否爲常量?
type StatusType int
const (
PENDING StatusType = iota
APPROVED
REJECTED
)
我想限制在REST-API中傳遞的值到StatusType。這樣的值不應該超過0,1,2。
我有一個在golang中使用iota定義的以下類型。如何檢查golang中的iota類型值是否爲常量?
type StatusType int
const (
PENDING StatusType = iota
APPROVED
REJECTED
)
我想限制在REST-API中傳遞的值到StatusType。這樣的值不應該超過0,1,2。
簡單地不輸出StatusType
(假設你在包'status
'中定義它)。
這遵循 「What is an idiomatic way of representing enums in Go?」:然後
type statusType int
const (
PENDING statusType = iota
APPROVED
REJECTED
)
type StatusTyper interface {
StatusType() statusType
}
func(st statusType) StatusType() statusType {
return st
}
任何外部包將指StatusType
- 樣變量作爲status.PENDING
,status.APPROVED
或status.REJECTED
。
(。其實現StatusTyper
接口只有三個statusType
Caveat applies)
假設你希望無效JSON有效載荷失敗,實現Unmarshaler接口:https://play.golang.org/p/zuchzQ0vmo
我這樣做是這樣的:
首先創建一個包名爲 「StatusType」(命名爲StatusType一個文件夾中):
文件名:$ GOPATH /枚舉/ StatusType/StatusType.go
package StatusType
type Int int
const (
Pending Int = iota
Approved
Rejected
end
)
func IsValid(value int) bool {
return value < int(end)
}
,並使用這樣的($ GOPATH /枚舉/ main.go):
package main
import (
"enum/StatusType"
"fmt"
)
func Test(enum StatusType.Int) {
fmt.Println(enum) //1
}
func main() {
Test(StatusType.Approved)
fmt.Println(StatusType.IsValid(1)) //true
fmt.Println(StatusType.IsValid(10)) //false
}
的StatusType包剛出口,你需要什麼,所以沒有必要覈對絲毫常量範圍。
以防萬一你要檢查,使用:StatusType.IsValid()
而妙處StatusType包:
當你想StatusType使用類型StatusType.Int的功能參數,並揭示了它的類型枚舉INT。
像:
Test(StatusType.Approved)
細節不相關的問題,但常量不應該大寫(C型)。據掛起/覈准/拒絕 – basgys
可能重複[Golang:創建一個恆定類型和制約型的值(http://stackoverflow.com/questions/37385007/golang-creating-a-constant-type-and-restricting -type-values) – icza