我知道围棋习语没有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")
}
但我认为这是错误的方式。
短遮阳篷:
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
实现这一点的更好方法可能是允许任何值,然后在使用该值时进行验证。一个简短的例子:
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中,但它们无权访
谢谢,伊利亚