Go 不分配内存的指针类型能用吗?详解

下面这个例子,先定义了一个类型为 *int 的指针类型,可是然后把 10 赋值给指针指向的值

package main

import (
 "fmt"
)

func main() {
   var i *int
   *i=10
   fmt.Println(*i)
}

看起来好像没有啥问题,可为什么会报错呢?

$ go run demo.go                      
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x109cea3]

goroutine 1 [running]:
main.main()
        /Users/MING/Code/Golang/src/demo/demo.go:9 +0x23
exit status 2

原因是我们只声明了指针类型,但并没有为其分配内存,没有内存地址,你赋给它的值应该存在哪里呢?自然只能报错了。

正确的写法应该是这样,在赋值给,先使用 new 函数给 i 分配内存。

package main

import (
    "fmt"
)

func main() {
    var i *int
    i = new(int)
    *i=10
    fmt.Println(*i)
}

教程来源于Github,感谢iswbm大佬的无私奉献,致敬!

技术教程推荐

Web协议详解与抓包实战 -〔陶辉〕

现代C++编程实战 -〔吴咏炜〕

编译原理实战课 -〔宫文学〕

Redis核心技术与实战 -〔蒋德钧〕

To B市场品牌实战课 -〔曹林〕

程序员的个人财富课 -〔王喆〕

AI大模型之美 -〔徐文浩〕

结构思考力 · 透过结构看问题解决 -〔李忠秋〕

LangChain 实战课 -〔黄佳〕