go - 如何在Golang中检查值是否为iota常量类型?

标签 go enums

我在 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/

相关文章:

go - 为什么CGO无法在C中直接调用函数指针?

go - 解析文本文件以匹配字符串并提取值(在 Golang 中)

Go Gorilla Mux "match anything"路径模板

C++11 在类中放置枚举类的重载运算符

java - Protocol Buffer 方法定义。传入参数

mongodb - 为什么json.RawMessage扩大mongoDb文档大小?

unit-testing - 在Go lang中一个接一个地多次模拟具有不同响应的相同功能

MySQL 5 星评级数据类型?

c# - 枚举作为通用约束 : What's the Reason Microsoft Didn't Want to Implement It?

typescript - 按键动态访问 typescript 中的枚举