我在Golang中使用iota定义了以下类型。

type StatusType int

const (
    PENDING StatusType = iota
    APPROVED
    REJECTED
)

我想将在REST-API中传递的值限制为StatusType。这样该值不应超过0,1,2。

最佳答案

我这样做:
首先创建一个名为“StatusType”的包(在名为StatusType的文件夹中):
文件名:$ GOPATH/enum/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/enum/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软件包仅导出您需要的内容,因此无需检查iota const范围。
以防万一,请使用:StatusType.IsValid()
关于StatusType软件包的好处是:
当您需要StatusType类型的函数参数时,请使用StatusType.Int,它表明它是int类型的枚举。
喜欢:
Test(StatusType.Approved)

关于go - 如何在Golang中检查值是否为iota常数类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37496098/

10-13 05:53