Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Fahami kelebihan dan kegunaan penunjuk Golang dan tingkatkan pengetahuan anda

Fahami kelebihan dan kegunaan penunjuk Golang dan tingkatkan pengetahuan anda

PHPz
PHPzasal
2024-01-24 09:52:06870semak imbas

Fahami kelebihan dan kegunaan penunjuk Golang dan tingkatkan pengetahuan anda

Kelebihan dan kegunaan penunjuk Golang, supaya anda lebih memahami, contoh kod khusus diperlukan

Dalam bahasa Go, penunjuk ialah jenis data khas yang menyimpan alamat memori pembolehubah. Dengan menggunakan penunjuk, kita boleh mengendalikan memori secara langsung di mana pembolehubah berada, dan kemudian merujuk dan mengubah suai pembolehubah. Berbanding dengan bahasa pengaturcaraan lain, penunjuk bahasa Go mempunyai beberapa kelebihan dan kegunaan unik. Artikel ini akan menggunakan contoh kod khusus untuk membantu kami memahami dengan lebih baik kelebihan dan penggunaan penunjuk dalam bahasa Go.

  1. Melalui objek besar mempunyai lebih sedikit overhed

Dalam lulus parameter fungsi atau kaedah, jika objek besar dilalui terus, ia akan menyebabkan overhed menyalin keseluruhan objek, terutamanya dalam panggilan rekursif atau gelung. Apabila menghantar penunjuk sebagai parameter, anda hanya perlu menghantar alamat memori, mengelakkan overhed penyalinan objek. Dalam contoh kod berikut, kami mentakrifkan jenis struktur Orang, yang mengandungi dua medan: nama dan umur. Kami mentakrifkan fungsi modifyByPointer, menggunakan penunjuk sebagai parameter untuk mengubah suai objek Orang yang diluluskan.

package main

import "fmt"

type Person struct {
    name string
    age  int
}

func modifyByPointer(p *Person) {
    p.name = "Alice"
    p.age = 30
}

func main() {
    p := Person{"Bob", 25}

    modifyByPointer(&p)

    fmt.Println(p)
}

Hasil larian ialah:

{Alice 30}

Anda boleh melihat bahawa fungsi modifyByPointer mengubah suai objek Orang yang dilalui melalui penuding, tanpa menyalin keseluruhan objek, dengan itu mengelakkan operasi penyalinan objek yang mahal.

  1. Peruntukan memori dinamik

Dalam bahasa Go, gunakan kata kunci baharu untuk memperuntukkan ruang memori secara dinamik untuk jenis dan mengembalikan penunjuk jenis. Dalam contoh kod berikut, kami menggunakan new untuk memperuntukkan memori secara dinamik bagi pembolehubah integer dan menetapkannya kepada penunjuk p. new可以动态地为类型分配一片内存空间,并返回该类型的指针。接下来的代码示例中,我们使用new来动态分配一个整型变量的内存,并将其赋值给指针p。

package main

import "fmt"

func main() {
    p := new(int)
    *p = 10

    fmt.Println(*p)
}

运行结果是:

10

可以看到,通过使用new

package main

import "fmt"

func swap(a *int, b *int) {
    tmp := *a
    *a = *b
    *b = tmp
}

func main() {
    x, y := 10, 20

    swap(&x, &y)

    fmt.Println(x, y)
}

Hasil yang sedang dijalankan ialah:
    20 10
  1. Anda boleh melihat bahawa dengan menggunakan kata kunci new, kami memperuntukkan memori secara dinamik untuk pembolehubah integer dan mengakses serta mengubah suai ruang memori melalui nilai p penunjuk.

Fungsi mengembalikan berbilang hasil

Dalam bahasa Go, fungsi boleh mengembalikan berbilang hasil. Penunjuk sangat berguna apabila fungsi kembali Anda boleh mengubah suai nilai pembolehubah luaran melalui penunjuk di dalam fungsi, dengan itu mencapai berbilang hasil pulangan. Dalam contoh kod berikut, kami mentakrifkan pertukaran fungsi untuk mengubah suai dua pembolehubah integer yang dihantar melalui penunjuk.

rrreee

Hasil larian ialah:

rrreee

Seperti yang anda lihat, dengan menggunakan penunjuk di dalam fungsi, kami berjaya menukar nilai x dan y. 🎜🎜Ringkasnya, penunjuk dalam bahasa Go mempunyai kelebihan dan kegunaan memindahkan objek besar dengan overhed yang kurang, memperuntukkan memori secara dinamik dan fungsi mengembalikan berbilang hasil. Dengan menggunakan penunjuk dengan betul, kami boleh mengurus memori dengan lebih baik dan meningkatkan prestasi dan kecekapan program. Saya harap contoh kod di atas dapat membantu semua orang memahami dan menggunakan petunjuk dengan lebih baik dalam bahasa Go. 🎜

Atas ialah kandungan terperinci Fahami kelebihan dan kegunaan penunjuk Golang dan tingkatkan pengetahuan anda. 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