Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengelakkan penyalinan nilai dalam parameter fungsi Golang lulus

Bagaimana untuk mengelakkan penyalinan nilai dalam parameter fungsi Golang lulus

WBOY
WBOYasal
2024-04-12 22:03:01757semak imbas

Dalam Go, cara untuk mengelakkan penyalinan nilai parameter fungsi adalah dengan menghantar parameter menggunakan penunjuk dan menambah asterisk (*) sebelum jenis parameter. Untuk struct dan hirisan, hantarkannya dengan rujukan, struct menggunakan penunjuk ke struktur dan hirisan menggunakan penunjuk ke data hirisan.

Bagaimana untuk mengelakkan penyalinan nilai dalam parameter fungsi Golang lulus

Cara untuk mengelakkan penyalinan nilai dalam parameter fungsi yang dihantar dalam Go

Dalam Go, parameter fungsi diluluskan secara nilai secara lalai. Ini boleh menyebabkan penyalinan nilai dan overhed prestasi yang tidak perlu. Untuk mengelakkan ini, parameter boleh diluluskan menggunakan penunjuk atau rujukan.

Lulus parameter menggunakan penunjuk

Untuk menghantar parameter menggunakan penunjuk, tambahkan asterisk (*) sebelum jenis parameter: *):

func myFunc(p *int) {
    // 对指针 p 进行操作
}

使用指针传递参数可以修改函数外部的变量值:

var x int
myFunc(&x)
fmt.Println(x) // 输出修改后的 x

使用引用传递结构体和切片

对于结构体和切片,可以通过使用引用传递它们来避免值复制:

  • 结构体:使用指向结构体的指针(*MyStruct
  • 切片:使用指向切片数据的指针([]int
    type MyStruct struct {
        Value int
    }
    
    func myFunc(s *MyStruct) {
        // 对 s 进行操作
    }
  • Melalui parameter menggunakan penunjuk membolehkan anda mengubah suai nilai pembolehubah di luar fungsi :
func sum(a, b int) int {
    return a + b
}

Lulus struct dan hirisan menggunakan rujukan

Untuk struct dan hirisan, anda boleh mengelakkan penyalinan nilai dengan menghantarnya melalui rujukan:

  • Struktur:

    Gunakan penunjuk ke struct (*MyStruct)

  • Slice:

    Gunakan penunjuk ke data hirisan ([]int)

    Contohnya:

    rreeeKes sebenar:

    Andaikan kita mempunyai fungsi yang mengira jumlah dua nombor: 🎜
    func sum(a, b *int) {
        *a += *b
    }
    🎜Jika kita lulus hujah mengikut nilai, salinan akan dibuat setiap kali fungsi ini dipanggil. Ini mahal untuk bilangan besar atau struktur data yang kompleks. 🎜🎜Kita boleh mengoptimumkan fungsi ini dengan menggunakan penunjuk: 🎜rrreee🎜Sekarang apabila kita memanggil fungsi ini, ia akan mengubah suai terus parameter yang dihantar, sekali gus mengelakkan salinan yang tidak diperlukan. 🎜🎜🎜Kesimpulan: 🎜🎜🎜Dengan menghantar parameter menggunakan penunjuk atau rujukan, anda boleh mengelakkan penyalinan nilai dalam parameter fungsi yang lulus dalam Go, dengan itu meningkatkan prestasi. Ini amat penting apabila berurusan dengan data besar atau struktur data yang kompleks. 🎜

Atas ialah kandungan terperinci Bagaimana untuk mengelakkan penyalinan nilai dalam parameter fungsi Golang lulus. 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