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
Susan Sarandonasal
2024-12-15 17:50:14335semak imbas

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)
}

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

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

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

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

value := 12345 // will be of type int
guess := &value

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!

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