兄弟连go教程(19)数据 -Struct


值类型,赋值和传参会复制全部内容。可⽤用 "_" 定义补位字段,⽀支持指向⾃自⾝身类型的指针
成员。
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

猜你喜欢

转载自blog.csdn.net/yincheng01/article/details/80911184