在 Go 中將 Int 指標設定為 Int 值
在 Go 中,一個常見的任務是為 int 指標賦值。然而,最近在程式碼片段中發現的錯誤揭示了一個潛在的陷阱:
package main import ( "fmt" "reflect" ) func main() { var guess *int fmt.Println(reflect.TypeOf(guess)) *guess = 12345 fmt.Println(guess) }
執行此程式碼時,出現以下錯誤:
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
根本原因在於事實上,指針的猜測最初被設定為nil。取消引用 nil 指標會引發執行時期錯誤,如錯誤訊息中所示。解決方案在於在嘗試為指標賦值之前為其分配記憶體:
var guess *int guess = new(int) *guess = 12345
此修改可確保猜測指向有效的記憶體位置,從而允許我們設定和檢索其值。
或者,使用簡短的變數宣告可以簡化程式碼:
guess := new(int) *guess = 12345
另一種方法是將現有變數的位址分配給指標:
value := 12345 // will be of type int guess := &value
此解決方案將猜測指向現有變量,而不是分配新記憶體。更改指向的值也會修改原始變數的值。
最後,請記住,將指標指向一個位置和為其賦值是不同的操作。前者分配記憶體或將指標設為現有變量,而後者則修改儲存在指向位置的值。
以上是Go中如何正確地給int指標賦值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!