Go 中的自定义字符串类型

如何在 Go 中创建限制为特定字符串值列表的自定义类型?例如:

type Suit = "Spade" | "Diamond" | "Club" | "Heart"


慕婉清6462132
浏览 117回答 2
2回答

慕容708150

Go 没有代数数据类型 (ADT)。您需要的是 ADT 中的“总和”类型。例如,Swift 和 Rust 中有枚举来支持它们。Go 没有泛型(尚无);没有选项,结果类型也是如此。虽然你想做的事情可以在Go中使用不同的方式来实现,但我喜欢使用const而不是空接口或类型检查或反射。我认为const会更快,可读性更强。以下是我将要走的路。如果这是您想要的,则可以从方法返回字符串,而不是打印。package mainimport "fmt"type Suit intconst (    Spade Suit = iota + 1    Diamond    Club    Heart)type Card struct {    suit Suit    no   int}func (c *Card) PrintSuit() {    switch c.suit {    case Spade:        fmt.Println("Its a Spade")    case Diamond:        fmt.Println("Its a Diamond")    case Club:        fmt.Println("Its a Club")    case Heart:        fmt.Println("Its a Heart")    default:        fmt.Println("Unknown!")    }}func main() {    c := Card{suit: Diamond}    c.PrintSuit()}  您可以在方法中接受外部函数,例如,如果处理逻辑是外部的。PrintSuit

翻翻过去那场雪

定义的类型别名,即 .是其基础类型为字符串的类型。stringSuitSuit现在,创建一些 Suit 类型的常量。在下面的颂歌中, , , 的类型是 Suit。现在,您希望将参数限制为某些输入的函数(这是不可能的);但是你可以做些什么来限制它只接受类型,并传递创建的任何变量。SpadeDiamondClubHeartSuitconst// Define new type alias for stringtype Suit  stringconst (    Spade Suit   = "Spade"    Diamond Suit = "Diamond"    Club Suit    = "Club"    Heart Suit   = "Heart")// function f only accepts parameter of type "Suit" func f(s Suit)  {    fmt.Println(s)}func main()  {    // Call the function f with Spade    f(Spade)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go