Фреймворк Revel и завершение кода Go

Можно использовать фреймворк Revel с поддержкой завершения кода Go. Насколько я знаю, утилита gocode требует, чтобы код был скомпилирован в библиотеку в подпапку pkg для работы, но фреймворк выполняет компиляцию на лету.

Я как-то потерялся в теме. Будет ли правильным вызовом go install для соответствующих подпакетов? Кажется, это работает, но это не самый элегантный способ сделать это с моей точки зрения.

Надеюсь, что кто-то может указать мне в правильном направлении.

РЕДАКТИРОВАТЬ: проблема сосредоточена только на источниках, которые я пишу как часть своего приложения Revel. Загруженные пакеты имеют автозаполнение, как и ожидалось.

EDIT2: это лучшее решение, которое я нашел до сих пор - выполнение команды go get в подпапке app/tmp вашего проекта. Итак, если ваш проект называется my_project, вы должны назвать что-то вроде go get my_project/revel/app/tmp Поскольку эта папка содержит основную функцию для проекта, она будет извлекать все зависимости и собирать их в пакеты. Если папка tmp не существует, вам нужно выполнить revel run в своем проекте и открыть веб-приложение, чтобы оно создавалось на лету. Надеюсь, это хоть немного поможет. Я все еще открыт для лучшей альтернативы :)


person Dario Filipović    schedule 29.10.2013    source источник
comment
Что вы используете для написания Go? Sublime Text + плагин GoSublime, например, использует пакеты, установленные на вашем GOPATH, для обеспечения функции автозаполнения, когда вы добавляете это в свой импорт пакетов. Revel, будучи доступным, должен работать таким же образом.   -  person elithrar    schedule 30.10.2013
comment
Я использую LiteIDE, GOPATH, как обычно, настроен на мою рабочую область. Пакеты, устанавливаемые с помощью go get, имеют автодополнение. Проблема возникает, когда вы начинаете писать приложение Revel. Исходники, которые я пишу, не компилируются в подпапку pkg, когда я запускаю приложение, поэтому для моего кода нет автозаполнения. Извините, если это неясно из сообщения, я отредактирую его, чтобы прояснить проблему.   -  person Dario Filipović    schedule 30.10.2013


Ответы (2)


Ваше приложение Revel должно находиться внутри вашей папки $GOPATH/src, и тогда завершение кода будет работать для вашего веб-приложения.

person rambocoder    schedule 12.11.2013
comment
Он находится в папке /src. Утилита gocode выполняет завершение кода на основе библиотек *.a, созданных в подпапке /pkg, и переменных GOOS и GOARCH, которые определяют подпапку в папке /pkg, в которую будет обращаться gocode. - person Dario Filipović; 13.11.2013

Обновлять

Либо процесс компиляции Revel harness изменился, либо gocode был улучшен. Но теперь все работает из коробки. Никаких дополнительных усилий не требуется.

Старый ответ

Я столкнулся с той же проблемой. Мое решение представляет собой модифицированную версию обходного пути EDIT 2. В моем app/init.go я добавил:

import "os/exec"

а также

// Build the project packages on app start so it's possible to use autocomplete.
revel.OnAppStart(func() {
    if revel.Config.BoolDefault("mode.dev", false) {
        go func() {
            _, err := exec.Command("go", "get", "bitbucket.org/USERNAME/PROJECT/app/tmp").Output()
            if err != nil {
                revel.ERROR.Printf("failed to 'go get' project, error: %v", err)
            }
        }()
    }
})

Итак, теперь в режиме разработки он автоматически перекомпилирует все пакеты при каждой перекомпиляции проекта revel.

person user3366304    schedule 01.08.2014