13、Go 基础数据类型 - 再说指针之 new 函数
hi,我是温新
来来看看代码,然后再进行说明。
package main
import "fmt"
func main() {
var name *string
fmt.Println(name)// <nil> 空对象
}
1、若对指针变量进行赋值 *name = "王美丽"
,那么会报错;
2、name 默认值是一个 nil 空对象,而它要存储的值是一个地址值;
3、要对 nil 赋值自然就报错了,因为此时 name 没有地址。
*name = "王美丽"
赋值时报错信息:panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x0 pc=0x35def5]
解决之道
如果我们的需要就是要先开辟出一个能存储地址的指针变量,那么可以使用 new
函数进行包裹,其语法格式为:new(变量类型)
package main
import "fmt"
func main() {
// 1、声明一个指针类型
var name *string
// 2、new 函数分配一个零初始化的值
name = new(string)
fmt.Println(*name) // 值为空
// 3、赋值
*name = "王美丽"
fmt.Println(*name)
}
1、声明一个 string 类型的指针变量,其名的 name。内存会开辟出一块空间,其值为 nil;
2、通过 new 函数返回一个新分配的类型为 string 的指针,其指针指向的内容值为 zero value。可以这样理解,new 函数是一个占位符,使用它给指针类型进行赋值,如 string 类型其值为空,int 类型其值为 0;
3、打印结果,输出王美丽
请登录后再评论