2015-09-25 76 views
-1

在GO中,如何聲明函數WITH TYPE的返回變量?Golang:如何聲明返回的變量WITH TYPE?

例如我有這樣的代碼

dat, err := ioutil.ReadFile("/tmp/dat") 
check(err) 
fmt.Print(string(dat)) 

但我想是這樣的:

var dat []byte, err error := ioutil.ReadFile("/tmp/dat") 
check(err) 
fmt.Print(string(dat)) 

但是,不管我如何努力,我只得到這個輸出

syntax error: unexpected comma, expecting semicolon or newline or }

我的工作無IDE,隨着變量數量的增加,將所有返回值的類型保存在短期記憶中是非常愚蠢的......更別提其他人必須閱讀代碼了。

如何聲明返回的元組WITH類型?

回答

6

這是因爲您在您的作業中使用:=,這是一種便捷的語句來聲明和分配。它使得它不必提供類型,我假設編譯器只是通過返回的內容暗示它/無論哪種類型來自右側。相反,你需要這樣做;

​​

但是沒有人這樣做,因爲dat, err := ioutil.ReadFile("/tmp/dat")就是這樣一個更清晰的語法。

+0

這的確解釋了爲什麼沒有人這樣做。但是,清理器語法會聲明類型。這只是簡短的語法,通過隱藏相關的非冗餘信息來實現它的目標,這與IMHO不一樣。 –

+0

@StefanSteiger是的,這是真的。最後的評論完全是主觀的。這是Go中最常見的事情。我同意這可能很煩人,因爲您必須查看文檔/執行以查看正在分配哪些類型。我更喜歡略微冗長的語法,儘管我不知道它是否適用於Go的多種返回類型。在C#中,我強烈反對用'var'聲明而不是在LHS中提供類型。 – evanmcdonnal

+1

對C#來說是如此。例如,在codereview中,當你有IDatareader something = GetSomething()時你會立即看到,但是當你只有var something = GetSomething()時,你永遠不會注意到它沒有配置或使用。 –