Без IDE-подобной функции, как мы узнаем, где определены переменные уровня пакета? - PullRequest
0 голосов
/ 21 февраля 2020

В Go переменные «верхнего уровня» имеют область действия уровня пакета, а файлы не имеют никакого значения с точки зрения области действия. Нет понятия «модуль», как в python, javascript (es6) и др. c. (Ну, есть "go module", но это больше похоже на "package" в этих языках, и я не думаю, что оно здесь связано).

Если так, как мы узнаем, где переменные определены без IDE / помощь редактора? Я чувствую, что управляю большим набором глобальных переменных. Например:

// foo.go
package main

var foo = "foo"
// bar.go
package main

var bar = "bar"
// main.go
package main

import "fmt"

func main() {
    fmt.Println(foo, bar)
}

Здесь, как мы узнаем, откуда берутся foo и bar, если я не смог использовать сегодняшнюю функцию расширенного редактора и если проект была огромная кодовая база? Я действительно чувствую, что уже трудно следовать foo и bar даже в этом случае.

Ответы [ 3 ]

1 голос
/ 21 февраля 2020

Вы используете терминал без GUI? Если у вас нет доступа к IDE, все, о чем я могу думать, это использовать команду Linux, например grep, для поиска во многих файлах внутри папки пакета для var <variableName> терминов.

Если у вас есть пакет с именем test с 100 файлами, и вы хотите знать, где находится boo переменная пакета верхнего уровня, затем выполните:

grep -nw /path/to/test/*.go -e '^var boo'

Объяснение:

  • -n для вывода номера строки
  • -w обозначает целое слово
  • -e для шаблона

Использование /*.go вместо -r флаг, чтобы удостовериться, что он ищет только в .go файлах в каталоге верхнего уровня (также не ищет в подпакетах).

ВНИМАНИЕ: это предполагает, что все файлы правильно отформатированы с помощью gofmt например, и все переменные пакета не имеют отступ. Если случайно переменная имеет отступ с пробелами / табуляцией, вы можете просто пропустить ^ в шаблоне, но это, вероятно, также обнаружит var boo локальные переменные внутри функций.

Если в пакете слишком много переменные уровня пакета и пакет большой, тогда это может быть проблемой. Переменные верхнего уровня похожи на глобальные переменные, которых лучше избегать, если вы не знаете, что делать.

Кстати, выполнение go build -v или запуск других инструментов с -v будет выводить дополнительную информацию, такую ​​как пакеты, которые построен вдоль. Это может помочь вам в поиске.

0 голосов
/ 21 февраля 2020

godoc -http=:6060 в папке вашего проекта. Убедитесь, что это go-module или находится внутри вас $GOPATH/src

А затем http://localhost:6060/pkg/<your-package>?m=all - это локальная документация для всех экспортируемых и не экспортируемых символов.

Хотя это все равно не даст вам сопоставление переменных с файлами напрямую - это облегчает их обнаружение.

Все остальное (функции, методы ...) в документации напрямую связано с их источником

0 голосов
/ 21 февраля 2020

Вам нужно будет просмотреть все библиотеки, которые вы импортируете, как правило, в Golang вы бы поместили все вещи, относящиеся к определенному набору функций, в один пакет. Вы можете добавить к какой-либо функции все функции библиотеки или использовать определенное пространство имен, чтобы упростить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...