использование пакета go loader, как сгенерировать путь к пакету относительно другого в среде без gopath - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть лямбда-программа, которая загружает пакет для его анализа и выдачи выходного кода.

В этом отношении я использую официальный пакет go / loader, доступный здесь

Чтобы сохранить сгенерированный исходный код, я намереваюсь создать новый экземпляр *types.Package, чтобы позже я смог разобраться с объявлением типа с помощью вызовов types.TypeString(t, types.RelativeTo(outPkg)).

Проблема в том, что он просит указать путь к пакету, например, github.com/xxx/xxx.

С помощью gopath я мог бы перейти к манипуляциям с путями, чтобы определить соответствующие значения, необходимые для решения этой проблемы.

Однако без пути перехода я остался без решений.

Код, который я использую для загрузки программы, приведен ниже, и я хотел бы дать конечному пользователю возможность определить выходную цель как абсолютный путь пакета go (т.е. без ведущего gopath) или как абсолютный или относительный путь к файлу go (то есть: заканчивающийся на .go)

Как поступить?

func main() {

    verbosity := flag.Bool("verbose", false, "increase verbosity")
    wantTests := flag.Bool("wtests", false, "include tests")
    flag.Parse()

    var conf loader.Config
    {
        _, err := conf.FromArgs(flag.Args(), *wantTests)
        if err != nil {
            log.Fatal("failed to load package ", err)
        }
    }

    var prog *loader.Program
    {
        p, err := conf.Load()
        if err != nil {
            log.Fatal("failed to load program ", err)
        }
        prog = p
    }
    outPkg := types.NewPackage("pkg_path", "playground")
    //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...