当前位置: 首页 > 知识库问答 >
问题:

GO中自定义类型的枚举

赫连方伟
2023-03-14

我试图为我定义的类型生成枚举

type FeeStage int

从中我了解到可以使用iota创建基于此类型的枚举

const(
     Stage1 FeeStage = iota
     Stage2 
     Stage3
)
const(
     Stage1 FeeStage = iota           // 0
     Stage2          = iota + 6       // 7
     Stage3          = (iota - 3) * 5 // -5
)

是否有方法将具有自定义值的枚举列表自动转换为特定类型。这是我以前使用的,但只将常量的第一个成员转换为自定义类型。

const(
     Stage1 FeeStage = 1
     Stage2          = 2
     Stage3          = 2
)

这里有一个类似结果的操场

共有1个答案

益麻雀
2023-03-14

除了使用Iota和自动枚举,或者做最简单的事情之外,别无他法:

const(
     Stage1 FeeStage = 1
     Stage2 FeeStage = 2

     // or another syntax with same results
     Stage3 = FeeStage(2)
)

哪个IMHO比做Iota+5这样的事情更麻烦,正如您所说的,这真的很糟糕。

如果值在程序上下文之外不重要,我通常使用iota;如果需要在协议中使用这些值,我通常使用显式键入。

虽然我不得不说,有时只使用ints或字符串就足够了,但这取决于上下文。例如,请参见标准库中的http状态代码。他们没有特别的类型。

 类似资料:
  • 但有些时候我们需要控制枚举的类型,那么我们可以 Enum 派生出自定义类来满足这种需要。通过修改上面的例子: #!/usr/bin/env python3 # -*- coding: UTF-8 -*- from enum import Enum, unique Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Au

  • enum 关键字允许创建一个代表数个可能变量的数据的类型(原文:The enum keyword allows the creation of a type which may be one of a few different variants.若您对此句有 更好的翻译或理解,希望指出来,谢谢。)。在 struct 中任何合法的变量在 enum 同样是合法的。 // 隐藏未使用代码警告的属性。

  • Rust 自定义数据类型主要是通过下面这两个关键字来创建: struct: 定义一个结构体 enum: 定义一个枚举类型 而常量的创建可以通过 const 和 static 关键字来创建。

  • 存在多种方法来重新定义现有类型的行为以及提供新的类型。 重写类型编译 一个常见的需求是强制更改类型的“字符串”版本,即在create table语句或其他SQL函数(如cast)中呈现的版本。例如,应用程序可能希望强制呈现 BINARY 适用于除一个平台外的所有平台 BLOB 待渲染。在本例中,使用现有的泛型类型 LargeBinary ,是大多数用例的首选。但是为了更准确地控制类型,每个方言的编

  • 1. 包含头文件 #import <AdHubSDK/AdHubSDK.h> 2. AdHubCustomView 的创建和初始化 在需要导入广告的ViewController头文件中导入头文件并声明实例以及声明代理 #import <AdHubSDK/AdHubSDK.h> @interface AdHubCustomViewController ()<AdHubCustomViewDele

  • 问题内容: 如何在Go中创建只能接受有效值的自定义类型?例如,我要创建一个名为“名称”的类型,其基础类型为字符串。但是,它只能接受值“ John”,“ Rob”或“ Paul”。其他任何值都将返回错误。我已经以非常简单的方式创建了以下程序,以表示我想要实现的目标。 http://play.golang.org/p/jzZwALsiXz 编写此代码的最佳方法是什么? 问题答案: 您可以执行以下操作(