一、指针
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对象。