首页 >后端开发 >Golang >Go中如何正确给int指针赋值?

Go中如何正确给int指针赋值?

Susan Sarandon
Susan Sarandon原创
2024-12-15 17:50:14337浏览

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

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn