在 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中文网其他相关文章!