Попробуйте запустить go build -gcflags -live
. Это передает флаг -live
компилятору (go tool compile
), инструктируя его выводить отладочные сообщения об анализе живой активности. К сожалению, он печатает только в том случае, если он найден в реальном времени, а не в мертвом коде, но вы можете в теории посмотреть, что не отображаются в результатах.
Вот пример из компиляции следующей программы, хранящейся в dead.go
:
package main
import "fmt"
func main() {
if true {
fmt.Println(true)
} else {
fmt.Println(false)
}
}
Выход из go build -gcflags -live
:
# _/tmp/dead
./dead.go:7: live at call to convT2E: autotmp_5
./dead.go:7: live at call to Println: autotmp_5
Если я правильно читал это, вторая линия утверждает, что неявный вызов до convT2E
(который преобразует типы без интерфейса в типы интерфейсов, поскольку fmt.Println
принимает аргументы типа interface{}
) является живым, а в третьей строке указано, что вызов fmt.Println
в прямом эфире. Обратите внимание, что это не говорят, что звонок fmt.Println(false)
жив, поэтому мы можем сделать вывод, что он должен быть мертвым.
Я знаю, что это не идеальный ответ, но я надеюсь, что это поможет. unused
инструмента
Является ли ваше тестовое покрытие хорошим для того, что используется? Вы можете посмотреть профиль обложки и посмотреть, что не покрыто вообще. – JimB
О, другой подход, который вы могли бы предпринять, - это проанализировать файлы, чтобы получить позиции всех экспортируемых функций и методов, а затем вызвать «гуру-звонящих» с соответствующей областью, чтобы увидеть, есть ли какие-либо сайты вызовов. – JimB
@JimB Цените идеи, спасибо. К сожалению, у нас есть пятнистое покрытие кода. Инструмент 'гуру' может быть полезен. –