2015-10-07 2 views
0

Я пытаюсь построить godoc.org исходный код в своем локальном, чтобы внести некоторые изменения. Мой рабочий каталог: /Users/Dany/go/src/github.com/golang/gddo. В пакете gddo-server есть несколько файлов. Один из файлов go использует функцию из другого файла, который находится в том же пакете, но не поддерживается. Выбрасывает исключение Undefined: <function-name>.Как получить доступ к невыполненным функциям в одном пакете, но из другого файла в goalng?

Папка структура,

golang/gddo/ 
       gddo-server 
         main.go 
         crawl.go 

Как мы используем неэкспортируемую функцию из того же пакета в другом файл? Может ли кто-нибудь помочь мне в этом. Также, если кто-нибудь знает, как построить код godoc.org?

+0

Исходные файлы того же пакета могут без каких-либо усилий ссылаться на идентификаторы, определенные в любом из исходных файлов. Если они находятся в одной и той же папке, и если они имеют одно и то же объявление пакета, вы можете передать все экспортированные и невыполненные идентификаторы на уровне пакетов, как если бы все они были определены в одном файле. – icza

ответ

3

Исходные файлы одного и того же пакета могут без каких-либо усилий ссылаться на идентификаторы, определенные в любом из исходных файлов. Если они находятся в одной и той же папке, и если они имеют одно и то же объявление пакета, вы можете передать все экспортированные и невыполненные идентификаторы на уровне пакетов, как если бы все они были определены в одном файле.

См Spec: Packages:

пакет в свою очередь, строится из одного или нескольких исходных файлов, которые вместе декларируют константы, типы, переменные и функции, относящиеся к пакету и которые доступны во всех файлах одного и того же пакета ,

И Spec: Package clause:

Набор файлов, совместно использующих те же PackageName образуют реализацию пакета. Реализация может потребовать, чтобы все исходные файлы для пакета находились в одном каталоге.

Замечание: ваш пример представляет собой специальный пакет main. Если вы хотите запустить его с помощью go run, вам необходимо перечислить все исходные файлы.

Чтобы запустить пример с go run, перейдите к папке gddo-server и типа:

go run background.go browse.go client.go crawl.go graph.go main.go play.go template.go 

Или проще, если вы первый построить его. Перейдите в папку gddo-server и тип:

go build 

Это создаст родной исполняемый файл в той же папке. Для его запуска введите: gddo-server (в Windows) или ./gddo-server (в Linux).

Или вы можете установить его с помощью go install, который поместит исполняемый файл результата в папку $GOPATH/bin.

+0

Да. Ты прав. В этом случае имя папки - gddo-server, но все файлы имеют декларацию 'package main'. Любое предложение, как запустить это в локальном? – Dany

+0

@DineshAppavoo См. Отредактированный ответ. – icza

+0

Это сработало !. Я ценю вашу помощь. – Dany

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