Jenis Penegasan dan Suis Jenis dalam Go: Pertimbangan Prestasi
Dalam Go, penegasan taip dan suis taip menyediakan mekanisme penemuan jenis masa jalan. Walau bagaimanapun, kebimbangan telah dibangkitkan tentang prestasi mereka berbanding kaedah seperti perbandingan jenis ahli dalam C/C .
Untuk menilai kesannya, ujian penanda aras telah dijalankan untuk membandingkan kelajuan kaedah ini:
package main import ( "testing" ) type myint int64 type Inccer interface { inc() } func (i *myint) inc() { *i = *i + 1 } func BenchmarkIntmethod(b *testing.B) { i := new(myint) incnIntmethod(i, b.N) } func BenchmarkInterface(b *testing.B) { i := new(myint) incnInterface(i, b.N) } func BenchmarkTypeSwitch(b *testing.B) { i := new(myint) incnSwitch(i, b.N) } func BenchmarkTypeAssertion(b *testing.B) { i := new(myint) incnAssertion(i, b.N) } // Remaining helper functions...
Keputusan pada mesin AMD R7 2700X (Go v1.12.9) menunjukkan bahawa semua kaedah mempunyai persamaan prestasi:
BenchmarkIntmethod-16 2000000000 1.67 ns/op BenchmarkInterface-16 1000000000 2.03 ns/op BenchmarkTypeSwitch-16 2000000000 1.70 ns/op BenchmarkTypeAssertion-16 2000000000 1.67 ns/op
Berbeza dengan keputusan sebelumnya dari 2015 pada mesin amd64, tiada kelembapan ketara yang diperhatikan apabila menggunakan suis atau penegasan jenis berbanding dengan panggilan kaedah langsung atau akses antara muka.
Secara keseluruhannya, prestasi penegasan dan suis jenis telah meningkat dengan ketara dalam Go dan kini setanding dengan metodologi semakan jenis lain. Oleh itu, anda boleh menggunakannya dalam kod anda tanpa bimbang tentang penalti prestasi yang besar.
Atas ialah kandungan terperinci Bagaimanakah Penegasan Jenis dan Suis Jenis Go Berprestasi Berbanding Kaedah Semakan Jenis Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!