Nakedret adalah alat analisis statis go untuk menemukan pengembalian telanjang dalam fungsi yang lebih besar dari panjang fungsi yang ditentukan.
Instal Nakedret via GO Install:
go install github.com/alexkohler/nakedret/v2/cmd/nakedret @ latest Jika Anda belum menambahkan direktori GOPATH/bin ke variabel lingkungan PATH Anda maka Anda harus melakukannya.
Windows (CMD):
set PATH = %PATH% ;C:yourGOPATHbinBash (Anda dapat memverifikasi jalur telah ditetapkan):
# Check if nakedret is on PATH
which nakedret
export PATH= $PATH :/your/GOPATH/bin # to set path if it does not exist Mirip dengan alat anaylsis statis go lainnya (seperti golint , go vet ), nakedret dapat dipanggil dengan satu atau lebih nama file, direktori, atau paket yang dinamai oleh jalur impornya. Nakedret juga mendukung ... wildcard.
nakedret [flags] files/directories/packages
Saat ini, satu -satunya bendera yang didukung adalah -l, yang merupakan bendera numerik opsional untuk menentukan panjang maksimum fungsi yang dapat dilakukan (dalam hal panjang garis). Jika tidak ditentukan, itu default ke 5.
Itu juga dapat dijalankan menggunakan go vet :
go vet -vettool= $( which nakedret ) ./...Seperti dicatat dalam komentar tinjauan kode Go:
Pengembalian telanjang baik -baik saja jika fungsinya adalah beberapa garis. Setelah fungsi berukuran sedang, jadilah eksplisit dengan nilai pengembalian Anda. Konsekuensi: Tidak layak untuk menyebutkan parameter hasil hanya karena memungkinkan Anda untuk menggunakan pengembalian telanjang. Kejelasan dokumen selalu lebih penting daripada menyimpan satu atau dua garis dalam fungsi Anda.
Alat ini bertujuan untuk menangkap pengembalian telanjang pada fungsi non-sepele.
Mari kita ambil paket types di sumber Go sebagai contoh:
$ nakedret -l 25 types/
types/check.go:245 checkFiles naked returns on 26 line function
types/typexpr.go:443 collectParams naked returns on 53 line function
types/stmt.go:275 caseTypes naked returns on 27 line function
types/lookup.go:275 MissingMethod naked returns on 39 line function Di bawah ini adalah salah satu penggunaan pengembalian telanjang yang tidak begitu intuitif dalam types/lookup.go yang ditemukan oleh Nakedret (Nakedret akan mengembalikan nomor garis pengembalian telanjang terakhir dalam fungsi):
func MissingMethod ( V Type , T * Interface , static bool ) ( method * Func , wrongType bool ) {
// fast path for common case
if T . Empty () {
return
}
// TODO(gri) Consider using method sets here. Might be more efficient.
if ityp , _ := V . Underlying ().( * Interface ); ityp != nil {
// TODO(gri) allMethods is sorted - can do this more efficiently
for _ , m := range T . allMethods {
_ , obj := lookupMethod ( ityp . allMethods , m . pkg , m . name )
switch {
case obj == nil :
if static {
return m , false
}
case ! Identical ( obj . Type (), m . typ ):
return m , true
}
}
return
}
// A concrete type implements T if it implements all methods of T.
for _ , m := range T . allMethods {
obj , _ , _ := lookupFieldOrMethod ( V , false , m . pkg , m . name )
f , _ := obj .( * Func )
if f == nil {
return m , false
}
if ! Identical ( f . typ , m . typ ) {
return m , true
}
}
return
}build.Context.UseAllFiles mungkin berguna untuk beberapa orang.Tarik Permintaan Selamat Datang!
Jika Anda menikmati nakedret, lihat alat anaylsis statis saya yang lain!