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{}{}