2016-11-09 3 views
1

みんな!Golangで変数の値を制限するにはどうすればよいですか?

私はゴランの慣用句はセッターとゲッターを持っていないことを知っています。しかし、私はゴランの変数の価値を制限する必要があります。

私は、

type MyNewStringType string 

そしてMyStringTypeとして定義された変数は、新しい型を定義された値を制限する必要があります。 は「はい」、「いいえ」、

はどのように私はGolangでそれを行うことができます 「わからない」:MyStringTypeの

変数は、唯一の3つの値を持つことができますか? Javaでは、私は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

実際にはコンパイルに失敗しました。そのようなことを投稿する前に試してみてください:[Playgroundに行く](https://play.golang.org/p/OBwb3RB0V2) – icza

関連する問題