2016-11-09 125 views
1

夥計!如何限制Golang中變量的值?

我知道golang的習慣沒有setter和getter。但是我需要限制Golang的變量值。

我定義的新類型

type MyNewStringType string 

和變量,這被定義爲MyStringType,需要限制值。

MyStringType的變量只能有3個值: 「是」,「否」,「我不知道」

我怎樣才能做到這一點在Golang? 在Java中,C++我有setter和getter,但在Golang中並不正常。

我知道,我可以創造

type MyNewStringType struct { 
    Variable string 
} 

,並創建

func(m *MyNewStringType) SetVariable(newVar string) error { 
    if newVar == "Yes" || newVar == "No" || newVar == "I don't know" { 
    m.Variable = newVar 
    return nil 
    } else { 
    return errors.New("Wrong value") 
    } 

但我認爲這是錯誤的方式。

+8

我相信這是正確的方式。只需製作可變小寫字母,以便在包裝外不可訪問。 –

+3

[Golang:創建常量類型並限制類型的值]的相關/可能的重複(http://stackoverflow.com/questions/37385007/golang-creating-a-constant-type-and-restricting-the-types-值)。 – icza

+0

你可能想看看這個http://stackoverflow.com/questions/14426366/what-is-an-idiomatic-way-of-representing-enums-in-go –

回答

-1

短awnser:

type MyString string 
const (
    YES MyString = "yes" 
    NO = "no" 
    DONTKNOW = "i dont know" 
) 

func foo(arg MyString){ 
    fmt.Print(arg) 
} 

foo(YES) //success, prints "yes" 

foo("jop") //fails to compile 
+2

實際上它不能編譯失敗。請在發佈此類信息之前花點時間嘗試一下:[Go Playground](https://play.golang.org/p/OBwb3RB0V2) – icza