Kaedah Pengakses lwn. Penyahrujukan: Mana Yang Lebih Baik untuk Medan Penunjuk Penyahpepijatan?

DDD
Lepaskan: 2024-11-07 11:35:03
asal
367 orang telah melayarinya

Accessor Methods vs. Dereferencing: Which is Better for Debugging Pointer Fields?

Kaedah Aksesor lwn. Penyahrujukan untuk Penyahpepijatan

Dalam coretan kod ini, anda sedang mencetak nilai medan struct yang merupakan penunjuk kepada struct yang lain. Output ialah alamat memori bagi struct pointed-to, bukan nilai sebenar.

package main

import "fmt"

type SomeStruct struct {
    somePointer *somePointer
}

type somePointer struct {
    field string
}

func main() {
    fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}})
}
Salin selepas log masuk

Untuk tujuan penyahpepijatan, adalah lebih baik untuk mencetak nilai sebenar medan. Terdapat dua cara untuk mencapai ini: menggunakan kaedah pengakses atau membatalkan rujukan penuding.

Kaedah Aksesor

Anda boleh mencipta kaedah pengambil untuk setiap medan penunjuk untuk mendapatkan nilai sebenar . Contohnya:

func (s SomeStruct) GetFieldValue() string {
    if s.somePointer == nil {
        return ""
    }
    return s.somePointer.field
}
Salin selepas log masuk

Kemudian, dalam kod anda, anda boleh memanggil kaedah pengambil untuk mencetak nilai:

fmt.Println(SomeStruct{&somePointer{"I want to see what is in here"}}.GetFieldValue())
Salin selepas log masuk

Pendekatan ini membolehkan anda mengawal pemformatan output dan menyediakan cara yang mudah untuk mengakses nilai medan tanpa memerlukan penyahrujukan.

Penyahrujukan

Jika anda memilih untuk menyahrujuk penuding secara langsung, anda boleh menggunakan sintaks berikut:

fmt.Println(*SomeStruct{&somePointer{"I want to see what is in here"}}.somePointer)
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini memerlukan berhati-hati kerana penyahrujukan penunjuk nol boleh menyebabkan panik masa jalan. Anda disyorkan untuk menggunakan kaedah pengambil untuk keselamatan melainkan anda pasti penunjuk itu bukan sifar.

Atas ialah kandungan terperinci Kaedah Pengakses lwn. Penyahrujukan: Mana Yang Lebih Baik untuk Medan Penunjuk Penyahpepijatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!