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, 可是又有些差别。node

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{}{}
相关文章
相关标签/搜索