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{}{}
相關文章
相關標籤/搜索