如何限制 Golang 中变量的值?

arz*_*nus 5 go

我知道 Go 惯用语言没有 setter 和 getter。但我需要限制 Go 中变量的值。

我定义了新类型

type MyNewStringType string
Run Code Online (Sandbox Code Playgroud)

定义为 MyStringType 的变量需要限制值。

MyStringType 的变量只能有 3 个值:“是”、“否”、“我不知道”

我怎样才能在Golang中做到这一点?在Java、C++中我有setter和getter,但在Golang中并不正常。

我知道,我可以创造

type MyNewStringType struct {
   Variable string
}
Run Code Online (Sandbox Code Playgroud)

并创造

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")
  }
Run Code Online (Sandbox Code Playgroud)

但我认为这是错误的方式。

use*_*871 -6

短篷:

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
Run Code Online (Sandbox Code Playgroud)

  • 这实际上并不能解决问题。在 `foo("jop")` 的情况下,`"jop"` 将是 `MyString` 类型,因此它将编译。 (3认同)