我想定义一个恒定值:常量声明与多个返回值
const var *url.URL = url.Parse("http://yahoo.com/")
我知道我必须完全定义变量及其类型。即我不能使用“:=”简写。
但是,评估函数的返回值同时返回常量和错误。
var, _ := url.Parse("http://yahoo.com/")
现在我该如何声明var是常量并在这种情况下抛弃错误?
我想定义一个恒定值:常量声明与多个返回值
const var *url.URL = url.Parse("http://yahoo.com/")
我知道我必须完全定义变量及其类型。即我不能使用“:=”简写。
但是,评估函数的返回值同时返回常量和错误。
var, _ := url.Parse("http://yahoo.com/")
现在我该如何声明var是常量并在这种情况下抛弃错误?
首先,你不需要指定类型,你可以简单地写var foo = <expression>
。 您需要使用var
而不是:=
的唯一原因是that short variable declarations are only allowed in functions,但您正在使用的功能之外。其次,你不能使用函数调用常量值,因为它们不会是常量(函数必须被评估,这与Go的常量定义相反)。也the spec on what constants are参见:
恒定值由符文,整数表示的,浮点,虚数,或字符串文字,标识符表示一个常数,常数表达式中,用这一结果是一个恒定的转化,或一些内置函数的结果值,如unsafe.Sizeof应用于任何值,应用于某些表达式的cap或len,应用于复常量的real和imag以及应用于数值常量的复数。布尔真值由预先定义的常量true和false表示。预先标识的标识符iota表示一个整数常量。
这里没有用户定义的函数。
你可以做的是定义一个var
(on play):
func MustParse(s string) url.URL {
url, err := url.Parse(s)
if err != nil {
panic(err);
}
return *url
}
var foo = MustParse("http://yahoo.com/")
当然,你也可以做
var foo, _ = url.Parse("foo")
,但有了这个,你不会看到,如果你的URL是错误的。
你不能这样做。抱歉。首先:Go中没有const变量。第二:由于var
是关键字,因此无法命名变量var
。第三:在函数体外不允许使用短变量声明。
感谢@nemo帮助我理解go的不变价值。我对常数的内部想法是错误的。 – enjoylife