2015-04-10 3 views
2

Возможно, это глупый вопрос, но есть ли способ найти все функции (в стандартной библиотеке или GOPATH), которые возвращают определенный тип?Поиск функций, возвращающих определенный тип

Например, существует множество функций, которые принимают io.Writer в качестве аргумента. Теперь я хочу знать, как создать io.Writer, и есть много способов сделать это. Но как я могу найти все пути легко, не догадываясь о пакетах и ​​просматривая все методы, чтобы найти те, которые возвращают io.Writer (или какой-либо другой тип, который я за ним)?

Редактировать: Я должен расширить свой вопрос, чтобы найти типы, реализующие определенный интерфейс. Придерживаясь примера io.Writer (который, по общему признанию, был плохим примером для исходного вопроса), было бы неплохо найти какие-либо типы, реализующие интерфейс Writer, поскольку эти типы будут действительными аргументами для функции, которая принимает значения io.Writer и, таким образом, ответить на исходный вопрос, когда тип является интерфейсом.

+1

'go install' [' golang.org/x/tools/cmd/oracle'](http://golang.org/s/oracle-user-manual). –

ответ

2

В мои дни кодирования я лично редко в необходимости найти функции возвращения Int16 и error (FUNC может возвращать несколько значений в Go, вы знаете)

Для второй части Вашего вопроса существует замечательный CMD implements написано by Dominik Honnef go get honnef.co/go/implements После обнаружения типа, удовлетворяющего вашим условиям, вы можете предположить, что конструктор типа (что-то вроде func NewTheType() TheType) будет сразу после объявления TheType в исходном коде и документах. Это проверенная практика Go.

+0

да, согласовано. Я не сразу понял вопрос. Редактирование - это в основном то, что я хотел начать. Просто попробовал инструменты cmd, и это идеально подходит для этого! Благодаря! – IamNaN

3

Возможно, не лучший способ, но взгляните на поле поиска в верхней части официального сайта golang.org. Если вы ищете "Writer":

http://golang.org/search?q=Writer

Вы получаете много результатов, сгруппированных по категориям, как

Также обратите внимание, что io.Writer является интерфейсом, и все мы знаем, как интерфейсы Go handles: при реализации интерфейса нет декларации о намерениях, тип неявно реализует интерфейс, если объявлены методы, определенные интерфейсом. Это означает, что вы не сможете найти много примеров, в которых создается и возвращается io.Writer, потому что тип может быть назван совершенно другим и все равно быть io.Writer.

Все становится немного проще, если вы ищете неинтерфейсный тип, например bytes.Buffer.

Кроме того, в документации объявляющей упаковки типа в Index разделе группы функций и методы пакета по типу так что вы найдете функции и методы же пакета, который возвращает тип, который вы ищете для права под его входом/ссылкой в ​​разделе Index.

Также обратите внимание, что вы можете проверить зависимости пакетов по адресу godoc.org. Например, вы можете увидеть, какие пакеты импортируют пакет io, который может быть хорошей отправной точкой для поиска дополнительных примеров (это было бы изнурительным в случае пакета io, потому что он настолько общий, что на данный момент 23410 packages import it).

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