Apakah perbezaan prestasi antara kaedah dan fungsi dalam golang?

WBOY
Lepaskan: 2024-04-27 09:42:01
asal
605 orang telah melayarinya

Dalam bahasa Go, kaedah biasanya berfungsi lebih baik daripada fungsi kerana ia mengakses terus medan jenis penerima dan mengelakkan penyalinan data. Kaedah digunakan terutamanya untuk beroperasi pada nilai jenis penerima, manakala fungsi melaksanakan tugas bebas daripada jenis tertentu. Penanda aras menunjukkan bahawa kaedah adalah kira-kira 30% lebih cepat daripada fungsi. Oleh itu, adalah disyorkan untuk memilih kaedah apabila mempertimbangkan prestasi, tetapi fungsi masih berguna apabila fleksibiliti diperlukan atau apabila melaksanakan tugas yang tidak berkaitan dengan jenis tertentu.

方法和函数在 golang 中的性能差异是什么?

Perbezaan prestasi antara kaedah dan fungsi dalam Go

Dalam bahasa Go, "kaedah" dan "fungsi" ialah kedua-dua blok kod yang digunakan untuk melaksanakan tugas tertentu, tetapi ia mempunyai beberapa perbezaan utama yang akan menjejaskan prestasi mereka.

Kaedah

  • dikaitkan dengan jenis penerima tertentu
  • boleh mengakses medan dan kaedah dalam jenis penerima
  • biasanya digunakan untuk memanipulasi atau mengubah nilai jenis penerima

fungsi

  • tidak dikaitkan dengan Perkaitan jenis tertentu
  • hanya boleh mengakses parameter dan pembolehubahnya dalam skop pengisytiharan
  • Biasanya digunakan untuk melaksanakan tugasan bebas daripada operasi jenis tertentu

Perbezaan prestasi

Secara umumnya, kaedah adalah lebih berprestasi daripada fungsi Kelebihan. Ini kerana:

  • kaedah boleh mengoptimumkan akses medan dengan mengakses medan jenis penerima secara langsung, manakala fungsi memerlukan akses medan melalui parameter.
  • Kaedah boleh memanfaatkan kaedah jenis penerima untuk mengelakkan penyalinan data ke dalam pembolehubah baharu.

Contoh Praktikal

Pertimbangkan fungsi dan kaedah berikut, kedua-duanya mengira jumlah sekeping:

// 函数
func SumInts(s []int) int {
    var sum int
    for _, v := range s {
        sum += v
    }
    return sum
}

// 方法
type IntSlice []int

func (s IntSlice) Sum() int {
    var sum int
    for _, v := range s {
        sum += v
    }
    return sum
}
Salin selepas log masuk

Menggunakan penanda aras, kita boleh membandingkan prestasinya:

import "testing"
import "time"

func BenchmarkSumInts(b *testing.B) {
    s := []int{1, 2, 3, 4, 5}
    for i := 0; i < b.N; i++ {
        SumInts(s)
    }
}

func BenchmarkSumMethod(b *testing.B) {
    s := IntSlice{1, 2, 3, 4, 5}
    for i := 0; i < b.N; i++ {
        s.Sum()
    }
}
Salin selepas log masuk

Menjalankan penanda aras berikut:

BenchmarkSumInts            500000000    21.8 ns/op
BenchmarkSumMethod         500000000    14.9 ns/op
Salin selepas log masuk

Seperti yang anda lihat, kaedah jauh lebih pantas daripada fungsi, kira-kira 30% lebih pantas.

Kesimpulan

Kaedah umumnya lebih baik daripada fungsi apabila mempertimbangkan prestasi. Walau bagaimanapun, fungsi masih berguna apabila anda perlu melaksanakan tugas yang tidak terikat pada jenis tertentu atau apabila anda memerlukan lebih fleksibiliti. Apabila memilih kaedah atau fungsi dalam Go, adalah penting untuk menimbang faktor ini dengan teliti.

Atas ialah kandungan terperinci Apakah perbezaan prestasi antara kaedah dan fungsi dalam golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan