13、Go 基础数据类型 - 再说指针之 new 函数

作者: 温新

分类: 【Go基础】

阅读: 538

时间: 2023-07-30 16:27:30

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、打印结果,输出王美丽

请登录后再评论