登录
首页 >  Golang >  Go问答

Go 中的自定义字符串类型

来源:stackoverflow

时间:2024-04-08 10:57:37 289浏览 收藏

一分耕耘,一分收获!既然都打开这篇《Go 中的自定义字符串类型》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

如何在 go 中创建仅限于特定字符串值列表的自定义类型?例如

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

解决方案


go 没有代数数据类型 (ADT)。你想要的是 adt 中的“sum”类型。例如,swift 和 rust 中有枚举来支持它们。 go 还没有泛型;没有选项,也没有结果类型。

虽然你想要做的事情可以在 go 中使用不同的方式来实现,但我喜欢使用 const 而不是空接口或类型检查或反射。我认为 const 会更快且更具可读性。我将这样做。如果您想要的话,您可以从方法返回字符串而不是打印。

package main

import "fmt"

type suit int

const (
    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 等方法中接受外部 func。

string 定义类型别名,即 suitsuit 是一种其基础类型为字符串的类型。

现在,创建一些 suit 类型的常量。在以下颂歌中,spadediamondclubheart 的类型为 suit。现在,您希望将参数限制为某些输入的函数(这是不可能的);但您可以限制它仅接受 suit 类型,并传递创建的任何 const 变量。

// Define new type alias for string
type Suit  string

const (
    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)
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>