兄弟連go教程(19)資料 -Struct

尹成發表於2018-07-04

值型別,賦值和傳參會複製全部內容。可⽤用 "_" 定義補位欄位,⽀支援指向⾃自⾝身型別的指標
成員。
type Node struct {
_ int
id int
data *byte
next *Node
}
func main() {
n1 := Node{
id: 1,

data: nil,
}
n2 := Node{
id: 2,
data: nil,
next: &n1,
}
}


順序初始化必須包含全部欄位,否則會出錯。
type User struct {
name string
age int
}
u1 := User{"Tom", 20}
u2 := User{"Tom"} // Error: too few values in struct initializer


⽀支援匿名結構,可⽤用作結構成員或定義變數。
type File struct {
name string
size int
attr struct {
perm int
owner int
}
}
f := File{
name: "test.txt",
size: 1025,
// attr: {0755, 1}, // Error: missing type in composite literal
}
f.attr.owner = 1
f.attr.perm = 0755
var attr = struct {
perm int
owner int
}{2, 0755}
f.attr = attr



支援 "=="、"!=" 相等操作符,可⽤用作 map 鍵型別。
type User struct {
id int
name string
}
m := map[User]int{
User{1, "Tom"}: 100,
}


可定義欄位標籤,⽤用反射讀取。標籤是型別的組成部分。
var u1 struct { name string "username" }
var u2 struct { name string }
u2 = u1 // Error: cannot use u1 (type struct { name string "username" }) as
// type struct { name string } in assignment


空結構 "節省" 記憶體,⽐比如⽤用來實現 set 資料結構,或者實現沒有 "狀態" 只有⽅方法的 "靜
態類"。
var null struct{}
set := make(map[string]struct{})
set["a"] = null

相關文章