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