2016-08-01 4 views
1

Я новичок - просто играю с ним - но я написал инструмент командной строки - я вызываю около 30 различных функций, которые return x, err. В каждом случае - то, что я хочу сделать, - это просто паника, если есть ошибка - в принципе все работает отлично, или все это терпит неудачу.можно создать функцию типа (шаблона) в Golang

Я знаю, что есть template.Must(t Template*, err Error) Template* - и я знаю, что могу сделать check(something interface{}, err Error) interface{} - но чтобы использовать его, я должен сделать тип, который противен.

ли каким-либо образом можно сделать своего рода родовой функции panicIfError таким образом, что я могу сделать что-то вроде

x := panicIfError(ioutil.ReadFile(fileName)) 

и х выйти с правильным типом?

(Я видел много людей, которые помещают if на одной строке - на мой взгляд, жертвует слишком большой удобочитаемостью - в настоящее время мое единственное решение - сделать перегрузку panicIfError для каждого используемого типа, который не используется ideal)

ответ

0

Лучшее, что вы можете сделать, это объявить его, чтобы вернуть значение типа interface{}, но это не то, что вы ищете (вам понадобится type assertion, чтобы получить из него значения других типов).

Вы хотите, чтобы ваша функция panicIfError() возвращала различные типы бетона. Это невозможно в Go.

Показать похожие темы в FAQ: Why does Go not have generic types?

+0

, что на самом деле то, что я сделал на данный момент - кажется, наименьшему из всех зол - возвращение интерфейс {} и просто добавить утверждение типа каждый раз, когда я это делаю. сумасшедший, уродливый, но не такой уродливый, как составная формулировка! :) –

Смежные вопросы