Go语言程序:根据字符串值查找枚举


在 Go 语言中,根据给定的字符串查找与之对应的枚举常量是必要的。可以使用 switch 语句或一系列 if-else 语句来实现。另一种方法是使用 map,枚举常量作为值,字符串值作为键。这样就可以快速有效地根据其字符串形式查找枚举常量。让我们通过不同的示例来学习如何在 Go 编程语言中根据字符串值查找枚举。

方法一:使用字符串表示

在这个例子中,我们将看到如何使用字符串表示来根据字符串值查找枚举。const 关键字用于定义 Cloth 类型为一个枚举,包含 Saree、Kurti 和 Shrug 值。然后在 map 中将这些服装的字符串表示与枚举值关联起来。主函数搜索 clothes map 中 "saree" 的枚举值并将其打印到终端。让我们通过示例和算法来了解其执行过程。

语法

Map[]

map 是 Go 语言中内置的数据结构,允许存储和检索键值对。map 的键必须是唯一的,而值可以是任何数据类型。map 使用哈希表实现,可以高效地存储和检索数据。可以使用 [] 操作符添加、检索和删除项,并且可以使用 make() 函数和 map 关键字来创建它们。

算法

  • 步骤 1 - 创建一个 main 包,并在程序中声明 fmt(格式化包),其中 main 用于生成可执行的示例,fmt 用于格式化输入和输出。

  • 步骤 2 - 使用 const 关键字定义一个名为 Clothes 的新枚举类型。

  • 步骤 3 - 分别将整数 0、1 和 2 分配给枚举值 Saree、Kurti 和 Shrug。

  • 步骤 4 - 创建一个名为 clothes 的 map,将服装的枚举值与其字符串表示关联起来。

  • 步骤 5 - 在主函数中使用 clothes map,根据其字符串表示查找特定服装的枚举值。

  • 步骤 6 - 使用 fmt.Println() 函数(其中 ln 表示换行)将枚举值打印到控制台。

示例

package main
import "fmt"

type Clothes int  //create type clothes

const (
   Saree Clothes = iota
   Kurti
   Shrug
)

var clothes = map[string]Clothes{   //create a map to link enumeration values with string representation
   "saree": Saree,
   "kurti": Kurti,
   "shrug": Shrug,
}

func main() {
   cloth := clothes["saree"]
   fmt.Println("The enum value of particular cloth is:")
   fmt.Println(cloth)  //print the enum value
}

输出

The enum value of particular cloth is:
0

方法二:使用用户自定义函数

此示例定义了一个名为 clothStruct 的结构体,其中包含 name 和 enum 字段。将表示潜在服装的元素定义为 clothStruct 的 clothList 数组,以及它们的名称和枚举值。此方法还允许根据需要扩展结构体的字段或方法。

算法

  • 步骤 1 - 创建一个 main 包,并在程序中声明 fmt(格式化包),其中 main 用于生成可执行的示例,fmt 用于格式化输入和输出。

  • 步骤 2 - 使用 const 关键字创建一个新的 Cloth 枚举类型。

  • 步骤 3 - 将 Saree、Kurti 和 Shrug 定义为整数,并分别赋予 0、1 和 2 的值。

  • 步骤 4 - 创建一个名为 clothStruct 的结构体类型,其中包含 name 和 enum 字段。

  • 步骤 5 - 创建一个名为 clothList 的 clothStruct 数组,其中包含表示潜在服装的元素及其名称和枚举值。

  • 步骤 6 - 在主函数中遍历 clothList 数组,检查结构体的 name 字段是否与提供的 cloth 字符串匹配。

  • 步骤 7 - 如果 name 字段匹配,则打印枚举值并结束循环。

  • 步骤 8 - 如果输入字符串与任何枚举值都不匹配,则应始终考虑添加错误处理。

示例

在这个例子中,我们将看到如何使用用户自定义函数根据字符串值查找枚举。

package main
import "fmt"
type Cloth int 

const (
   Saree Cloth = iota    //create cloth enumeration type
   Kurti
   Shrug
)

type clothStruct struct {
   name string
   enum Cloth
}

var clothList = []clothStruct{
   {name: "saree", enum: Saree},
   {name: "kurti", enum: Kurti},
   {name: "shrug", enum: Shrug},
}

func main() {
   cloth := "kurti"
   fmt.Println("The enum value of cloth is:")
   for _, v := range clothList {
      if v.name == cloth {
         fmt.Println(v.enum)   //print the required enum value
         break
      }
   }
}

输出

The enum value of cloth is:
1

结论

我们使用两种方法执行了根据字符串值查找枚举的程序。在第一个示例中,我们使用了字符串表示;在第二个示例中,我们使用了包含字符串和枚举字段的结构体。

更新于:2023年2月20日

4K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.