Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Penegasan Jenis dan Suis Jenis Go Berprestasi Berbanding Kaedah Semakan Jenis Lain?

Bagaimanakah Penegasan Jenis dan Suis Jenis Go Berprestasi Berbanding Kaedah Semakan Jenis Lain?

DDD
DDDasal
2024-12-14 08:33:12822semak imbas

How Do Go's Type Assertions and Type Switches Perform Compared to Other Type Checking Methods?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn