我想定義一個恆定值:常量聲明與多個返回值
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