当前位置: 首页 > 知识库问答 >
问题:

如何限制Golang中变量的值?[副本]

狄溪叠
2023-03-14

我知道围棋习语没有setter和getter。但我需要限制Go中变量的值。

我定义了新类型

type MyNewStringType string

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

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

如何在戈朗中做到这一点?在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")
  }

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

共有2个答案

苏鸿才
2023-03-14

短遮阳篷:

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
桓信鸥
2023-03-14

实现这一点的更好方法可能是允许任何值,然后在使用该值时进行验证。一个简短的例子:

package main

import (
  "fmt"
  "os"
)

func main() {
  fmt.Println("First try")
  if err := doSomething("foo"); err != nil {
    fmt.Fprintf(os.Stderr, "%v\n", err)
  }

  fmt.Println()

  fmt.Println("Second try")
  if err := doSomething("Yes"); err != nil {
    fmt.Fprintf(os.Stderr, "%v\n", err)
  }
}

func doSomething(s string) error {
  switch s {
  case "Yes", "No", "I don't know":
    fmt.Println("Success!")
    return nil
  default:
    return fmt.Errorf("unsupported value: %q", s)
  }
}

输出:

First try
unsupported value: "foo"

Second try
Success!

https://play.golang.org/p/nt8J9wdlZkp

如果您坚持以您建议的方式实现它,如果您像上面的示例中那样使用开关语句,您的Set可变方法可能会变得更整洁一点。

 类似资料:
  • Perl6/Raku 我想创建一个sub,因为只允许将某些值传递给它。不传递允许的值将创建一个checker错误(perl6-c)。 我该怎么做? 非常感谢,-T 你好,Raiph, 在我的WinPopUps模块中,我使用了“在哪里”方法,因为它一目了然地告诉用户允许的值是什么。我喜欢它!这一切都是关于可运维性的!(顺便说一句,下面是你创建的怪物!) 谢谢你的帮助-T 如果您想要完整的模块以及在哪

  • 问题内容: 我注意到, UpdatePanel 在每个触发器 上发布了表单中包括的每个字段 。 但是在大多数情况下,我在同一页面上使用2-3个UpdatePanels,每个页面都是独立的。 当我单击更新一个面板时,我的页面将接收页面的所有输入数据(确定这是合乎逻辑的),但是我将只读取此UpdatePanels数据并按照其操作,而不会读取其他面板数据。 因此,我看到这种方式发生了很多流量。 因此,有

  • 我有一个关于java中最终变量的问题,我已经编写了一个简短的代码来演示这个问题。java8的语言规范规定: 一旦分配了最终变量,它始终包含相同的值。如果最终变量包含对对象的引用,则对象的状态可能会因对该对象的操作而改变,但该变量始终引用同一对象。语言规范 为了进一步研究,我在一个小示例代码中尝试了三件事。我尝试的第一件事是创建一个类型的对象并为其分配非最终引用。然后我也为它分配了一个最终引用。在第

  • 问题内容: 我了解到,已有问题和答案已经解决了此问题。我已经仔细检查了它们,但是由于我的处境,我无法应用这些线程中提供的解决方案。 假定JavaScript是客户端,而PHP是服务器端,则提供了以下两种解决方案: GET / POST方法(第3个帖子) 限制:Facebook页面选项卡应用程序 我无法使用以上方法通过URL传递参数,因为Facebook页面选项卡已加载到iFrame中,但它们无权访

  • 谢谢,伊利亚