go 结构体

时间:2023-03-09 10:00:00
go 结构体

结构体声明

type Employee struct {
ID int
Name string
Address string
DoB time.Time
Position string
Salary int
ManagerID int
}

对象声明及初始化

// 这个时候 dibert 已经初始化并可以使用了,所有值使用零值初始化
var dilbert Employee // e1, e3 返回的是指针类型
e1 := new(Employee)
e2 := Employee{ID: 1, Name: "Lee"}
e3 := &Employee{1, "lee"} 初始化的时候如果使用 `k: v` 可以打乱顺序,如果是 `v1, v2` 则必须和结构体声明顺序一致。
// 指针类型
// 直接声明指针是没有初始化的
// 直接访问变量会报 panic: runtime error: invalid memory address or nil pointer dereference
var e4 *Employee

属性访问

fmt.Println(dilbert.Name)

方法定义

go 的 struct 有点类似其它语言的 class, 但是又有些差异。

func (e *Employee) Print() {
fmt.Println(e.Name)
} // 使用
dibert.Print()

匿名字段

声明一个结构体可以只写类型,不写 value,最常见的就是锁的使用,eg:

type Node struct {
sync.RWMutex
Name string
} // 使用匿名字段
var node Node
node.Lock // 调用的是 sync.RWMutex.Lock()

匿名结构体

a := &struct{}{}