Dalam Go, pengelogan jejak memberikan cabaran unik: meminimumkan kos penyata log yang dilumpuhkan dalam laluan kritikal. Tidak seperti C/C , Go tidak mempunyai makro prapemproses, menjadikannya perlu untuk meneroka penyelesaian alternatif.
Satu pendekatan melibatkan penggunaan antara muka fmt.Stringer dan fmt.GoStringer. Dengan menangguhkan pemformatan sehingga pelaksanaan log, panggilan fungsi yang mahal dalam argumen pengelogan boleh dielakkan:
type LogFormatter interface { LogFormat() string } // Inside the logger if i, ok := i.(LogFormatter); ok { fmt.Println(i.LogFormat()) }
Strategi lain ialah menukar pembalak pada masa jalan menggunakan antara muka logger atau pada masa binaan menggunakan kekangan binaan. Walau bagaimanapun, ini memerlukan memastikan bahawa tiada panggilan mahal dimasukkan ke dalam argumen pengelogan.
Pilihan ketiga ialah mentakrifkan Logger itu sendiri sebagai bool, mengurangkan keterlaluan sambil menyediakan cara ringkas untuk mengawal pengelogan:
type Log bool func (l Log) Println(args ...interface{}) { fmt.Println(args...) } var debug Log = false if debug { debug.Println("DEBUGGING") }
Akhir sekali, penjanaan kod boleh diterokai, walaupun ia tidak sesuai untuk konfigurasi masa jalan. Dengan menggunakan gofmt -r atau membina fail menggunakan teks/templat, adalah mungkin untuk membuat binaan nyahpepijat yang berasingan untuk senario penyahpepijatan tertentu.
Atas ialah kandungan terperinci Bagaimana untuk Meminimumkan Kos Penyata Pengelogan Jejak Orang Kurang Upaya dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!