【发布时间】:2014-02-19 18:05:42
【问题描述】:
我想定义一个常量值:
const var *url.URL = url.Parse("http://yahoo.com/")
我知道我必须完全定义变量及其类型。即我不能只使用“:=”简写。
但是评估函数的返回值同时返回常量和错误。
var, _ := url.Parse("http://yahoo.com/")
现在我如何声明 var 是常量并在这种情况下丢弃错误?
【问题讨论】:
标签: go
我想定义一个常量值:
const var *url.URL = url.Parse("http://yahoo.com/")
我知道我必须完全定义变量及其类型。即我不能只使用“:=”简写。
但是评估函数的返回值同时返回常量和错误。
var, _ := url.Parse("http://yahoo.com/")
现在我如何声明 var 是常量并在这种情况下丢弃错误?
【问题讨论】:
标签: go
首先,不需要指定类型,直接写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 是关键字。第三:在函数体之外不允许短变量声明。
【讨论】: