Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menetapkan Nilai dengan betul kepada Penunjuk Int dalam Go?

Bagaimana untuk Menetapkan Nilai dengan betul kepada Penunjuk Int dalam Go?

Susan Sarandon
Lepaskan: 2024-12-15 17:50:14
asal
333 orang telah melayarinya

How to Correctly Assign a Value to an Int Pointer in Go?

Menetapkan Penunjuk Int kepada Nilai Int dalam Go

Dalam Go, tugas biasa ialah menetapkan nilai kepada penuding int. Walau bagaimanapun, ralat yang ditemui baru-baru ini dalam coretan kod memberi penerangan tentang kemungkinan perangkap:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var guess *int
    fmt.Println(reflect.TypeOf(guess))
    *guess = 12345
    fmt.Println(guess)
}
Salin selepas log masuk

Apabila melaksanakan kod ini, ralat berikut berlaku:

Type: *int
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x483c7d]

goroutine 1 [running]:
main.main()
    /home/aaron/projects/gopath/src/github.com/AaronNBrock/go-guess/main.go:16 +0x9d
exit status 2
Salin selepas log masuk

Punca utama terletak pada hakikat bahawa tekaan penunjuk pada mulanya ditetapkan kepada sifar. Penyahrujukan penuding nol membuang ralat masa jalan, seperti yang dilihat dalam mesej ralat. Penyelesaiannya terletak pada memperuntukkan memori untuk penuding sebelum cuba memberikan nilai kepadanya:

var guess *int
guess = new(int)
*guess = 12345
Salin selepas log masuk

Pengubahsuaian ini memastikan tekaan menunjukkan lokasi memori yang sah, membolehkan kami menetapkan dan mendapatkan semula nilainya.

Sebagai alternatif, menggunakan pengisytiharan pembolehubah pendek boleh memudahkan kod:

guess := new(int)
*guess = 12345
Salin selepas log masuk

Pendekatan lain adalah untuk tetapkan alamat pembolehubah sedia ada kepada penuding:

value := 12345 // will be of type int
guess := &value
Salin selepas log masuk

Penyelesaian ini menunjukkan tekaan kepada pembolehubah sedia ada, dan bukannya memperuntukkan memori baharu. Menukar nilai ditunjuk juga mengubah suai nilai pembolehubah asal.

Akhir sekali, perlu diingat bahawa menuding penunjuk ke lokasi dan memberikan nilai kepadanya adalah operasi yang berbeza. Yang pertama memperuntukkan memori atau menetapkan penuding kepada pembolehubah sedia ada, manakala yang terakhir mengubah suai nilai yang disimpan di lokasi yang ditunjuk.

Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Nilai dengan betul kepada Penunjuk Int dalam Go?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan