golang 结构体指针使用

Posted by Shi Hai's Blog on December 26, 2022

一、指针

1.1 基本概念

go语言中指针定义和c语言中的指针定义和使用没有太大区别,一个有效的go语言指针定义:

var ip *int
var fp *float32

1.2 在结构体中使用指针

type Employee struct {
        FirstName *string
        Salary    *int
}

func (e Employee) SetName(name string) {
    if e.FirstName == nil {
        e.FirstName = &name
        return
    }
    *e.FirstName = name
}

这段代码有不太方便的几个点:

  • 参数初始化:需要定义属性变量并传入变量内存地址;
  • 参数修改:需要对结构体中的属性指针进行判断,不能直接赋值;

建议修改为如下代码更加高效:

type Employee struct {
    FirstName string
    Salary    int
}

func (e *Employee) SetName(name string) {
    e.FirstName = name
}    

这里需要注意的是func (e *Employee) SetName(name string)e *Employee不能修改为e Employee,这个方法只会更新栈上的对象副本而不会更新employee对象。

二、附录