2015-09-25 6 views
-1

В GO, как объявить возвращаемые переменные функции WITH TYPE?Golang: Как объявить возвращаемые переменные С ТИПОМ?

например. У меня этот код

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, и по мере увеличения числа переменных, действительно, идиотский должен хранить все типы возвращаемых значений в краткосрочной памяти ... не говоря уже о том, что кто-то еще должен прочитать код.

Как я могу объявить возвращаемый тип набора с типом?

ответ

6

Это потому, что вы используете := в своем назначении и это удобный синтаксис для объявления и назначения. Это делает так, что вам не нужно указывать тип, я полагаю, что компилятор просто подразумевает его тем, что возвращается/какие бывают типы с правой стороны. Вместо этого вам нужно это сделать;

var dat []byte 
var err error 

dat, err = ioutil.ReadFile("/tmp/dat") 

Но никто не делает этого, потому что dat, err := ioutil.ReadFile("/tmp/dat") - такой чистый синтаксис.

+0

Это действительно объясняет, почему никто этого не делает. Однако синтаксис Cleaner будет объявлять типы. Это всего лишь менее подробный синтаксис, который достигает своей цели, скрывая релевантную, не избыточную информацию, которая не является тем же IMHO. –

+0

@StefanSteiger да, это правда. Этот последний комментарий полностью субъективен. Это то, что наиболее распространено в Go, хотя. Я согласен с тем, что это может раздражать, потому что вам нужно взглянуть на документы/перейти к реализации, чтобы узнать, какие типы назначаются. Я предпочитаю немного более подробный синтаксис, хотя я не знаю, будет ли он работать с множественными типами возврата Go. In say C# Я категорически против объявления с помощью 'var' вместо того, чтобы предоставлять тип на LHS. – evanmcdonnal

+1

Так верно для C#. Например, в кодовом представлении вы сразу увидите, когда у вас есть IDatareader something = GetSomething(), но когда у вас есть только var something = GetSomething(), вы никогда не заметите, что ему не хватает распоряжения или использования. –