У меня есть лямбда-программа, которая загружает пакет для его анализа и выдачи выходного кода.
В этом отношении я использую официальный пакет 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")
//...
}