亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 中的自定義字符串類型

Go 中的自定義字符串類型

Go
慕婉清6462132 2022-08-01 10:22:26
如何在 Go 中創建限制為特定字符串值列表的自定義類型?例如:type Suit = "Spade" | "Diamond" | "Club" | "Heart"
查看完整描述

2 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

Go 沒有代數數據類型 (ADT)。您需要的是 ADT 中的“總和”類型。例如,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


查看完整回答
反對 回復 2022-08-01
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

定義的類型別名,即 .是其基礎類型為字符串的類型。stringSuitSuit


現在,創建一些 Suit 類型的常量。在下面的頌歌中, , , 的類型是 Suit?,F在,您希望將參數限制為某些輸入的函數(這是不可能的);但是你可以做些什么來限制它只接受類型,并傳遞創建的任何變量。SpadeDiamondClubHeartSuitconst


// 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)

}


查看完整回答
反對 回復 2022-08-01
  • 2 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號