Есть ли способ настроить / направить go build
, go test
и т. Д. Для отчета о расположении файлов с использованием абсолютных путей? Я часто запускаю go build
из моего редактора (который анализирует выходные данные), и было бы удобно, если бы текущий рабочий каталог процесса go build
и сам редактор не должны были совпадать.
Пока что,единственное решение, которое я нашел, - это обернуть go build
в сценарий, который определяет абсолютные пути к файлам, затем сразу cd
s во временный каталог, прежде чем вызывать go build
с realpath
'd исходными аргументами.
Создание временного каталога и cd
его использование только для того, чтобы обмануть инструменты go, кажется странным обходным путем, поэтому мне интересно, есть ли более прямое решение.
Есть ли способ настроить go tools
для сообщения об абсолютных путях, кроме упаковки их и cd
в случайных каталогах?
Предположим, что мой GOPATH
равен /go
, и что у меня есть следующеефайл.
// /go/src/nonexistent-website.com/example-2019-10-26/main.go
package main
import (
"fmt"
)
func main() {
fmt.Println("hi")
}
Предположим, я намеренно ввел ошибку в этом файле.
// /go/src/nonexistent-website.com/example-2019-10-26/main.go
package main
// import (
// "fmt"
// )
func main() {
fmt.Println("hi")
}
go build main.go
сообщает о следующей ошибке:
/go/src/nonexistent-website.com/example-2019-10-26$ go build main.go
# command-line-arguments
./main.go:9: undefined: fmt in fmt.Println
2
go build ...
все еще сообщает ./main.go
в качестве пути к файлу, если задан абсолютный путь
/go/src/nonexistent-website.com/example-2019-10-26$ go build `realpath main.go`
# command-line-arguments
./main.go:9: undefined: fmt in fmt.Println
2
go build
, кажется, дает пути относительно каталога, из которого он был вызван:
Это пути, которые go build
генерируется при первом обращении к cd
к корневому каталогу.
/go/src/nonexistent-website.com/example-2019-10-26$ (a=`realpath main.go` && cd / && go build $a)
# command-line-arguments
go/src/nonexistent-website.com/example-2019-10-26/main.go:9: undefined: fmt in fmt.Println
2
Можно заставить go build
выдавать абсолютные пути путем cd
-ing к каталогу, который гарантированно будет свежим
/go/src/nonexistent-website.com/example-2019-10-26$ (a=`realpath main.go` && cd `mktemp -d` && go build $a)
# command-line-arguments
/go/src/nonexistent-website.com/example-2019-10-26/main.go:9: undefined: fmt in fmt.Println
2